Freder的博客

while(scanf())有什么错

· Freder · Code ·

写算法题时,我常常偷懒写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。

(完)

本文遵循 CC BY-ND-ND 3.0 协议,转载请注明原作者,禁止商用,禁止演绎。


© 2017 - 2019 Freder
Hexo 强力驱动 · 主题 Milk