您的位置:首页 > 编程语言 > C语言/C++

关于c语言中EOF用法的理解

2013-04-05 12:46 337 查看



作者:[b]Senlern[/b]
转载请注明,原文链接:/article/10317932.html

首先看一下EOF的官方解释:

计算机术语,缩写通常为EOF(End Of File),在操作系统中表示资料源无更多的资料可读取。资料源通常称为档案或串流。在C语言中,或更精确地说成C标准函式库中表示文件结束符(end of file)。在while循环中以EOF作为文件结束标志,这种以EOF作为文件结束标志的文件,必须是文本文件。在文本文件中,数据都是以字符ASCII代码值的形式存放。我们知道,ASCII代码值的范围是0~255,不可能出现-1,因此可以用EOF作为文件结束标志。

#include<stdio.h>
#include <stdlib.h>

int main(void)
{
int a,b;
while(scanf("%d %d",&a,&b) != EOF)
{
printf("%d\n",a+b);
}
return 0;
}

在上面这段代码中,定义了两个整型的变量,通过在while循环中判断输入的返回值是否为EOF(即-1)然后打印a+b的值。

之前我也只是听说过EOF这个名词,但是具体怎么用也不知道,经过我的测试发现:

1.

输入1 2然后回车打印出3,这个好理解,scanf接收到两个整型数据然后回车(这时候scanf的返回值是2,scanf()函数执行成功时的返回值是成功读取的变量数,也就是说,你这个scanf()函数有几个变量,如果scanf()函数全部正常读取,它就返回几。)

2.

输入1然后回车,它会让你继续输入,在这期间不论你空格键,回车键,TAB键只要是你没输入一个非空白符它就会让你无限输入。(空白字符会使scanf()函数在读操作中略去输入中的一个或多个空白字符,空白符可以是space,tab,enter等,直到第一个非空白符出现为止。scanf()函数接收输入数据时,遇以下情况结束一个数据的输入:(不是结束该scanf函数,scanf函数仅在每一个数据域均有数据,并按回车后结束)。①
遇空格、“回车”、“跳格”键。②遇非法输入。

3.

输入1 2 3 4 5 6 7 8,然后回车,它会打印出3 7 11 15,这个我自己理解是当你按下回车时scanf结束,但是接收的数据有4组,它会先取出两个然后打印之和,然后依次。。。。打印(理解不对之处还望各位赐教。)

4.

输入,. ~等字符回车,会进入无限循环屏幕上打印无限的数字,这是因为输入一个字符串时,由于scanf需要一个整型数据,可是当前输入缓冲中的数据并不是一个整型的数据,那么scanf会直接退出,并返回0,表示读到0个数,同时不会改为输入缓冲,会进入到下一轮的循环之中,在屏幕输出:上一次的计算结果,这时由于输入缓冲中还有数据,scanf不会阻塞,而是直接返回,可是发现缓冲中的数据不是所要的数据,这样返回0.....使得循环一直运行下去。要是想解决问题可以在循环语句中加上这句话:fflush(stdin);这样就不会无限打印数字了。

至于想让循环结束,在windows下输入ctrl+Z(即EOF)然后回车就可以了。好了,我得研究结束了,写出来大家共同理解,希望文中有错误的地方大家可以指点一二。


                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: