while(scanf("%d",&n),n)和EOF有区别吗

img


这个代码如果用while(scanf("%d",&n),n)提交上去是对的
而用while(scanf("%d",&n)!=EOF)就是错的
但是两个运行结果一样
想问问这两个的使用有什么区别吗

scanf("%d",&n),n是逗号表达式,值是最后一项的值,也就是n的值。那么如果输入的n小于等于0,while就退出循环了
EOF是文件结束符,它是个常量,值是-1。
把它与scanf的返回值做比较之前,就需要知道scanf的返回值到底是什么
如果scanf函数不报错,那么返回值就是最后一个输入的有效数字。
比如scanf("%d%d",&a,&b),如果输入1,2,那么返回值是2.如果输入1,b,b识别不出来,返回值是1
如果读取出错了(输入非法),那么返回值是0