while(scanf())有什么错
写算法题时,我常常偷懒写while(scanf())
,这个问题让我浪费了很多时间。每次都是突然看到改成while(scanf()!=EOF)
就AC。今天想起查查这两种写法有什么区别。
// scanf函数返回成功读入的数据项数,读入数据时遇到了“文件结束”则返回EOF。
int scanf(const char *restrict format,...);
// 而EOF定义在stdio.h中,值为-1。
#define EOF (-1)
有个疑惑是什么时候才算“文件结束”?
Linux中,在新的一行的开头,按下Ctrl-D,就代表EOF(如果在一行的中间按下Ctrl-D,则表示输出”标准输入”的缓存区,所以这时必须按两次Ctrl-D);Windows中,Ctrl-Z表示EOF。
现在知道了while(scanf()!=EOF)
为什么对,但是while(scanf())
为什么错呢?也就是说scanf()
在什么情况才会返回0?
只有在scanf()
函数的第一个变量格式不正确时返回值才为0。
(完)