【发布时间】:2019-07-07 02:55:32
【问题描述】:
我正在使用EOF跳出'while'循环,并想通过'scanf'输入一些数字。循环外的'scanf'在macos上不起作用。
我试过在macos和centos上运行这段代码。centos上的结果就是我需要的。
#include <stdio.h>
#include <stdlib.h>
int main(){
int i;
//ctrl+d=EOF
while(scanf("%d",&i) != EOF){
printf("?");
}
printf("\nloopend\n");
//those 'scanf' are ignored on macos.
scanf("%d",&i);
scanf(" %d",&i);
scanf("%d ",&i);
printf("\nend\n");
}
输入(不带','): 1,\n,ctrl+d
输出(centos):
1
?
loopend
//waiting for input here
输出(macos):
1
?
loopend
end
//the program ended directly
【问题讨论】:
-
为什么是
scanf("%d",&i) != EOF而不是scanf("%d",&i) == 1? -
尝试在循环后调用
clearerr(stdin); -
请不要测试
scanf对EOF的返回值。请做测试scanf的返回值,了解您希望扫描的项目数。 -
@MM 谢谢!
clearerr(stdin)正是我所需要的。 -
@SteveSummit 谢谢!实际上我希望一个不是正常数字的符号结束循环。