【发布时间】:2021-06-13 04:53:22
【问题描述】:
我正在写这段代码:
int b;
char c;
scanf("%d", &b);
while((c = getchar()) != EOF) {
if(c >= 9 || c < 0) {
printf("Invalid number!\n");
exit(0);
}
}
当我分配b 时,c 自动等于b。
例如,如果我对b 的输入是10,它会自动进入if 语句并退出代码。
有人知道为什么吗?
【问题讨论】:
-
检查来自
scanf的返回值并从那里开始 -
getchar返回一个int。如果c不是int类型,则您无法可靠地检查 EOF。 -
如果您的输入文件是文本,则极有可能
c >= 9为真。也许您的意思是if( c >= '9' || c < '0'),它与if( c >= 9 || c < 0)非常不同 -
你提供了什么输入?您是否在不同的行上提供了
scanf和getchar的输入?如果是这样,getchar将读取scanf留下的未读换行符。 Just avoid usingscanf. -
while (scanf("%d", &b) != 1) { fputs ("error: invalid integer input.\n", stderr); for (int c = getchar(); c != '\n' && c != EOF; c = getchar()) {} }