【心得】Ctrl+Z、\n、\0、eof的区别和用法

从scanf谈起:

一:scanf的返回值:读入的域的个数

int scanf(
const char *format [,
argument]...
);
int _scanf_l(
const char *format,
locale_t locale [,
argument]...
);
int wscanf(
const wchar_t *format [,
argument]...
);
int _wscanf_l(
const wchar_t *format,
locale_t locale [,
argument]...
);

Return Value
Returns the number of fields successfully converted and assigned; the return value does not include fields that were read but not assigned. A return value of 0 indicates that no fields were assigned.
If format is a NULL pointer, the invalid parameter handler is invoked, as described in Parameter Validation. If execution is allowed to continue, these functions return EOF and set errno to EINVAL.
For information on these and other error codes, see _doserrno, errno, _sys_errlist, and _sys_nerr.

// crt_scanf.c
// compile with: /W3
/* This program uses the scanf and wscanf functions
* to read formatted input.
*/
#include <stdio.h>
int main( void )
{int i, result;float fp;char c, s[81];wchar_t wc, ws[81];result = scanf( "%d %f %c %C %80s %80S", &i, &fp, &c, &wc, s, ws ); // C4996// Note: scanf and wscanf are deprecated; consider using scanf_s and wscanf_sprintf( "The number of fields input is %d\n", result );printf( "The contents are: %d %f %c %C %s %S\n", i, fp, c, wc, s, ws);result = wscanf( L"%d %f %hc %lc %80S %80ls", &i, &fp, &c, &wc, s, ws ); // C4996wprintf( L"The number of fields input is %d\n", result );wprintf( L"The contents are: %d %f %C %c %hs %s\n", i, fp, c, wc, s, ws);
}71 98.6 h z Byte characters
36 92.3 y n Wide charactersThe number of fields input is 6
The contents are: 71 98.599998 h z Byte characters
The number of fields input is 6
The contents are: 36 92.300003 y n Wide characters

二、scanf对特殊符号的返回值

  • 自然数:符合输入格式的数据的个数

  • 0:不符合输入格式的数据(如果Ctrl+Z和回车键之间有其他字符,则也返回0)

      以"%d"为例:要求是十进制整数,如果输入字符'r'、'e'、'\'等,就返回0,自然地,'\n''\0''eof'也返回0,这与他们本身的含义(比如换行符、终止符、文件结束符)并无关系
  • -1:Ctrl+Z(紧接着按下回车键)

三、输入流中Ctrl+Z的含义

注:Windows系统中一般采用阻塞式检查 Ctrl+Z、Unix/Linux系统下一般采用非阻塞式的检查 Ctrl+D。本程序是在Windows系统下,因此使用阻塞式的 Ctrl+Z 来标识流的结束。

阻塞式方式的特点:

  1. 只有按下回车之后才有可能检测在此之前是否有Ctrl+Z按下。

  2. (按照输入时间顺序读取输入缓冲区的数据)读取到Ctrl+Z时,如果后面有可读的数据,则不会理睬Ctrl+Z,也就是不认为Ctrl+Z代表着流的末尾。(因为有要读的数据,还不能认为到了流的末尾)。

  3. Ctrl+Z产生的不是一个普通的ASCII码值,也就是说它产生的不是一个字符,所以不会跟其它从键盘上输入的字符一样能够存放在输入缓冲区。

四、键盘输入时回车键的作用:

将键盘上敲下的字符送入输入缓冲区。

如果用户在按回车键之前输入了不只一个字符,其他字符会保留在键盘缓冲区中,等待后续的输入函数(比如scanf()、getchar())调用读取。也就是说,后续的scanf()调用不会等待用户按键,而是直接读取缓冲区中的字符,直到缓冲区的字符读取完毕后,才等待用户按键。

对于scanf(),只有字符char在输入流中的获取会承认空格或回车中的换行符为所要取的值,别的如字符串或者字符数组或int类型均不认为空格或回车中的换行符为其值即丢弃空格符和回车符,以空格作为划分。

五、那换行符'\n'、终止符'\0'、文件结束符'eof'是干嘛的

  1. '\n'、'\0'、'eof'是C/C++编译器在编译代码时识别的符号。

  2. Ctrl+Z是操作系统在处理输入流时识别的符号。

'\n'换行符,

#include <stdio.h>
int main()
{int c;do{printf("请输入文档的结尾标志");}while((c=getchar())!='\n');printf("已得到文档结束标志\n");    //直接回车return 0;
} 

'\0'终止符
'\0' is the null termination character. It marks the end of the string.

char cAlphabet[] = "I know all about programming!";

is the same as

char cAlphabet[] = {'I',' ', 'k','n','o','w',' ','a','l','l',' ','a','b','o','u','t',' ','p','r','o','g','r','a','m','i','n','g','!','\0'};
#include <stdio.h>
int main()
{int c;do{printf("请输入文档的结尾标志");}while((c=getchar())!='\0');printf("已得到文档结束标志\n");return 0;
} 

'eof'文件结束符

#include <stdio.h>
int main()
{int c;do{printf("请输入文档的结尾标志");}while((c=getchar())!=EOF);printf("已得到文档结束标志\n");    //Ctrl+Z然后回车return 0;
} 

在控制台输入的时候,操作系统将Ctrl+Z翻译为文档结束符。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/260985.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MVC-05 Model(1)

在开发应用程序的过程中&#xff0c;经常需要处理许多大大小小的数据&#xff0c;例如&#xff0c;SQL Server数据库存取、连接AD(Active Directory&#xff09;数据库进行验证、调用外部Web Service取得数据等。除了访问数据外&#xff0c;也经常需要对数据做成格式验证、逻辑…

计算机 数据库知识点,数据库知识点总结

实体&#xff0d;联系模型基本概念实体和属性实体是客观存在并且可以相互区分的任何事物属性是实体所代表事物具有的某种特性每个属性都有一定的取值范围&#xff0c;成为该属性的值域实体集和码实体集是具有相同属性的实体的集合实体的值是该实体诸属性值的列表实体集的值是该…

计算机网络课程思政教学设计,信息与网络工程学院成功举办第一届课程思政教学设计大赛...

为有效贯彻全国高校思想政治工作会议精神&#xff0c;强化课程思政建设&#xff0c;全面提高人才培养质量&#xff0c;根据《教务处关于举办第一届课程思政教学设计大赛的通知》要求&#xff0c;结合学院工作安排&#xff0c;7月18日&#xff0c;信息与网络工程学院在龙湖校区西…

Java 中参数传递是传值还是引用?

2019独角兽企业重金招聘Python工程师标准>>> 明确概念 值传递&#xff1a;指的是将变量的一个备份传过去&#xff0c;当该备份被修改后&#xff0c;不会影响原来变量的值&#xff1b; 引用传递&#xff1a;指的是将该变量的地址传过去&#xff0c;当值修改后&#x…

sencha touch 手势识别左右滑动

sencha touch 中添加手势识别非常简单&#xff0c;就是监听 dom 元素的 move 事件&#xff1a; 1. 为你的 view 注册 swipe 事件 // 为当前 view 注册手势滑动事件 Ext.get(myTouchView).on(swipe, onViewSwipe, this); 2. 判断滑动方向 // 手势滑动监听事件 onViewSwipe : fun…

比较两浮点数的方法

在工作中&#xff0c;我需要比较一系列数据&#xff0c;一方数据精度为两位小数,而另一方精度为三位小数。我需要将三位小数四舍五入成两为小数后进行比较。在操作的过程中&#xff0c;问题出现了&#xff0c;明明应该相等的数据却走了不等的分支。什么原因导致呢&#xff1f;一…

IIS8托管WCF服务

WCF服务程序本身不能运行&#xff0c;需要通过其他的宿主程序进行托管才能调用WCF服务功能&#xff0c;常见的宿主程序有IIS&#xff0c;WAS&#xff0c;Windows服务&#xff0c;当然在学习WCF技术的时候一般使用控制台应用程序或WinForm程序进行托管。本文将详细介绍如何使用I…

北京师范大学认知神经科学 计算机,北京师范大学认知神经科学和学习国家重点实验室.pdf...

北京师范大学认知神经科学和学习国家重点实验室北京师范大学认知神经科学与学习国家重点实验室DTI 、静息fMRI、形态学测量原理及数据分析与应用深度讲习班(第二轮通知)近年来&#xff0c;磁共振技术已广泛地应用到神经科学、认知神经科学、临床医学等领域的研究&#xff0c;而…

JAVA面向对象-----instanceof 关键字

instanceof 关键字 1&#xff1a;快速演示instanceof Person pnew Person();System.out.println( p instanceof Person); 2&#xff1a;instanceof是什么&#xff1f; 1&#xff1a;属于比较运算符&#xff1a; 2&#xff1a;instanceof关键字&#xff1a;该关键字用来判断一…

电子工程师必去的论坛网站

Abstract 搞电子不能闭门造车&#xff0c;要到网上去交流交流&#xff0c;做个网络吸血鬼也好。本人偶然也发一些资料&#xff0c;还是要感谢活跃在各大论坛上的大虾们&#xff0c;让小弟要走了不少弯路。有问题google一下&#xff08;不是本人崇洋媚外&#xff0c;google的功能…

对象的引用

int、datetime、bool、char等类型都属于值类型&#xff08;valuetype&#xff09;&#xff0c;赋值的时候是传递拷贝。 普通的对象则是引用类型&#xff0c;赋值的时候是传递引用。传递给函数也是引用传递的。转载于:https://www.cnblogs.com/roboot/archive/2012/02/15/235329…

Cesium应用篇:3控件(3)SelectionIndicator InfoBox

假设这样一个场景&#xff0c;用户在Cesium球上加载了一个GeoJson文件&#xff08;DataSource&#xff09;&#xff0c;里面是全美国所有州的Geometry信息&#xff08;Entity&#xff09;&#xff0c;叠加到球面后&#xff0c;你自然会有一种冲动&#xff0c;点击某一个州&…

北理工计算机学院新闻,北理工计算机学子勇夺CVPR 2021 AI安全国际顶级赛事季军...

2021年4月19日&#xff0c;CVPR 2021挑战者计划第六期落下帷幕。由北理工计算机学院教师李元章、张全新及广州大学李进教授指导的DemiguiseWoo战队&#xff0c;在挑战赛赛道二“ImageNet无限制对抗攻击”发起冲击&#xff0c;最终以9303.6的总分取得决赛第三名的好成绩&#xf…

字符串入门

暴力 字典树总结&#xff1a;字典树的功能就是map字符串得到编码或者查询前缀关系套模板的时候注意t,s,&#xff0d;‘a’,[26],sz0的初始化还有一个问题&#xff0c;到底字典树开多少内存比较合适&#xff0c;反正至少是要开字符总长度*2hdu1251 http://acm.hdu.edu.cn/showpr…

C++ 的基础概念(3)——多态详解。

最近两次面试都问到了多态&#xff0c;我也不得不重视起来了&#xff0c;最近最大的收获就是&#xff1a;基础知识很重要&#xff0c;就算你很会写代码&#xff0c;但是面试官问你基础知识答不上来的话&#xff0c;也很难被人赏识和录用&#xff0c;所以还是要多补补基础概念&a…

美育在计算机教育中应用,在现代教育技术中绽放数学美育之花

21世纪是信息化的社会&#xff0c;计算机、网络等现代技术的飞速发展&#xff0c;作为现代教育技术&#xff0c;计算机多媒体技术和网络技术已经越来越多地走进小学数学课堂&#xff0c;为深化教学改革&#xff0c;培养学生能力&#xff0c;发展学生个性&#xff0c;提供了崭新…

.NET Forms身份验证

.NET表单身份验证 ASP.NET Forms 身份验证的简单实现&#xff1a;1&#xff09;在Web.config文件中配置应用程序使用 Forms 身份验证&#xff1b;2&#xff09;创建登陆页面&#xff0c;将用户身份验证票证添加到Cookie集合。1.配置文件中设置为Forms验证<authentication mo…

Oracle SQL篇(三)Oracle ROWNUM 与TOP N分析

首先我们来看一下ROWNUM&#xff1a;含义解释&#xff1a;1、rownum是oracle为从查询返回的行的编号&#xff0c;返回的第一行分配的是1&#xff0c;第二行是2&#xff0c;依此类推。这是一个伪列&#xff0c;可以用于限制查询返回的总行数。2、rownum不能以任何基表的名称作为…

C++ Primer 第10章 pair类型

//10.2.cpp //至少使用三种方法创建pair对象。 //编写三个版本的程序&#xff0c;分别采用不同的方法来创建pair对象 //方法1&#xff1a;在定义pair对象时提供初始化式来创建pair对象#include<iostream> #include<vector> #include<utility> #include<st…

计算机对口升学可以报考的学校,对口升学可以报考的学校都在这里,赶快来收藏吧...

对口升学指对口高考&#xff0c;在平常又叫对口单招&#xff0c;对口升学&#xff0c;是从中等职业学校毕业生招生&#xff0c;强调中等职业学校毕业生对口升高职的专业技能考试&#xff0c;以专业技能成绩为主要录取依据的招生办法。报名条件具有正式学籍的中等职业学校毕业生…