c++ - while( scanf ("%d", &n) ) { ... } 在 Linux 上按 Ctrl+D 时不退出

标签 c++ c scanf

如果使用此代码读取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/

相关文章:

c++ - std::vector<char> 到 std::vector<T> 转换 c++

C++:验证指针?

c++ - 未解析的外部符号 sf::Time with SFML

c - 扫码不行

c++ - 在 Mingw-w64 中使用 %I64u 得到奇怪的结果

c - 在 C 中使用 scanf 进行模式匹配

c++ - 了解数组和指针之间的关系

c - 一行代码中的多个逻辑运算符

c - 当我尝试打印(复制的)字符串时,为什么会得到一些任意数字?

c - 我的 C 宏做错了什么?