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

cal*_*ops 1 c c++ scanf

如果使用此代码读取int数字,当我按Ctrl + D时,该程序将不会退出.

while( scanf("%d", &n) ) { ... }
Run Code Online (Sandbox Code Playgroud)

但如果我使用它,它将退出.

while( scanf("%d", &n) == 1 ) { ... }
Run Code Online (Sandbox Code Playgroud)

OS I测试此代码的是Linux,编译器是g ++ 7.3.1.

Ste*_*mit 5

你写的第一个代码:

while( scanf("%d", &n) ) { ... }
Run Code Online (Sandbox Code Playgroud)

如果 scanf成功返回true而失败返回false,可以正常工作 但那并不是什么scanf回报.

scanf实际上返回成功匹配的项目数.或者如果没有匹配则返回0.或者(这是关键点)EOF如果到达文件结尾,它返回负值(通常为-1),例如当您键入control-D时.

只要scanf返回非零,您编写的第一个代码就会循环.这就是它永远循环的原因.

你写的第二个代码:

while( scanf("%d", &n) == 1 ) { ... }
Run Code Online (Sandbox Code Playgroud)

循环,只要scanf成功匹配它要求您的一个项目.这是正确的方法,这就是它工作的原因.