1. EOF (End Of File)
名称是文件结束标志,定义为 -1(不是ASCII码值为-1),可以通过 Ctrl+Z 直接键入。
2. scanf 函数
scanf函数是有返回值的。
一般来说,它的返回值是成功读取的元素个数。但当遭遇读取失败时,它的返回值便是 -1 (也就是它自己返回一个EOF) 。
而若是一个元素都还没成功读入的时候就遇到了读取失败或EOF,那它直接就会返回-1,不管后面再输入了什么。
(4) 输入a或b为非数字,属于元素类型不匹配的情况。
第一个元素'A'并没有被读入,scanf()会停留在那,并把字符'A'放回缓冲区再又继续读取。下一次读取的时候,仍然是从'A'开始。事实上,scanf()一直无法越过'A'读到下一个字符,一直反复读入,并陷入了死循环。在如下程序中,scanf会直接认为读取结束了,跳出函数。
因而该程序终止后,一个元素也没有被读进去,但又不属于C语言定义下的读取失败,ret为0.
若将语句写成while(scanf("%d", &num) != EOF)这样,效果就是一直死循环。
(其实输完'A'按enter程序就会直接结束,而正常情况下敲enter仅仅是输入下一个数而已,这也是二者的一个差别。)
本文详细介绍了scanf 与 EOF 的含义与使用。
1. 当需要多组输入时,使用while(scanf("%d", &num) != EOF)控制循环入口。
2. 初学阶段了解如何使用即可:可以将EOF直接理解为一个简单的标记。当我们在scanf函数中输入CTRL + Z时,就能“召唤”出这个标记,从而结束 scanf 函数,达到控制循环的目的。
3. while((scanf("%d%d",&a,&b)) == 2) 与 while(scanf("%d", &num) != EOF)效果完全相同。
————————————————
版权声明:本文为CSDN博主「碳基肥宅」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/wyd_333/article/details/125857445