输入一串未知个数的数据直到EOF(-1)停止和键盘输入文件结尾符EOF

时间:2021-02-01 00:36:17

1. 输入到EOF(-1)停止

  如果一般自己调试程序,在输入数据未知数据数量的时候,希望随时可以停止数据输入。一般情况下,两种写法,一种遇换行符’\n’停止,但是由于’\n’符在输入阶段表示开始获取值的开始信号,如果不适用getchar()获取,一般scanf默认是不会认为换行是输入的数据,所以写法稍微复杂。该写法不做今天重点内容,如果想要学习该机制程序写法,详细请看下面的博文: 

http://blog.csdn.net/fx677588/article/details/52712417 C/C++ 输入一行每隔一个空格一个数据

  另一种写法则是模拟读取文件,遇文件结尾符停止读取。这个是我们今天想要研究的问题,下面我们先看对应程序的写法:

int data;
while(scanf("%d",&data)!=EOF) //EOF即文件结尾符,-1
{
printf("%d",data);
}

  或者

while(scanf("%d",&data)!=-1)//EOF即-1

  scanf()正常输入,返回成功读取的数据个数。当读取到文件结尾返回的是EOF,即-1。那么问题又来了,如何键盘输入文件结束符呢?

2. 键盘输入文件结尾符

  键盘输入是可以用来模拟文件结尾符,查相关资料你会知道,windows下可通过按“Ctrl +Z”、linux下可通过“Ctrl + D”来达到输入文件结束符的效果(提示:输入’Z’和’D’不用区分大小写)。
  但是输入时候会发现,为什么得不到理想的效果呢?实际上多数介绍忽略了操作上的细节。以windows上为例,实际操作过程是“换行Enter”,然后“Ctrl+Z”,然后再“换行Enter”才能终止上面的,linux上操作过程一样,“Ctrl+Z”换位“Ctrl+D”。
  直接“Ctrl+Z”不换行是不能成功读取到文件结尾符的。

int data;
while(scanf("%d",&data)!=EOF) //EOF即文件结尾符,-1
{
printf("%d",data);
}

  对应终端上显示和操作如下显示,^Z即对应“Ctrl+Z”操作地方:


输入一串未知个数的数据直到EOF(-1)停止和键盘输入文件结尾符EOF


个人学习记录,由于能力和时间有限,如果有错误望读者纠正,谢谢!

转载请注明出处:CSDN 无鞋童鞋。