如何理解C语言中while(scanf(“%d“, &num) != EOF)这一表达式?

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

  • 9
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值