如果使用此代码读取int
数字,当我按Ctrl + D 时,此程序不会退出。
while( scanf("%d", &n) ) { ... }
但是如果我使用它,它就会退出。
while( scanf("%d", &n) == 1 ) { ... }
我测试这段代码的操作系统是Linux,编译器是g++ 7.3.1。
最佳答案
你写的第一段代码:
while( scanf("%d", &n) ) { ... }
如果 scanf
成功则返回 true,失败则返回 false。但这不是 scanf
返回的内容。
scanf
实际上返回匹配成功的项目数。或者如果没有匹配则返回 0。或者(这是关键点)如果到达文件结尾,例如当您键入 control-D 时,它返回负值 EOF
(通常为 -1)。
只要 scanf
返回非零,您编写的第一个代码就会循环。这就是它永远循环播放的原因。
你写的第二段代码:
while( scanf("%d", &n) == 1 ) { ... }
循环,只要 scanf
成功匹配它要求您匹配的一项。这是正确的方法,也是它起作用的原因。
关于c++ - while( scanf ("%d", &n) ) { ... } 在 Linux 上按 Ctrl+D 时不退出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50087614/