为什么scanf()会在这段代码中导致无限循环?我有一个小的C-程序,它只读取stdin的数字,每个循环一个。如果用户输入了NaN,则应该将一个错误打印到控制台,并且输入提示符应该再次返回。在输入“0”时,循环应该结束,给定的正/负值的数目应该打印到控制台。下面是节目:#include <stdio.h>int main(){
int number, p = 0, n = 0;
while (1) {
printf("-> ");
if (scanf("%d", &number) == 0) {
printf("Err...\n");
continue;
}
if (number > 0) p++;
else if (number < 0) n++;
else break; /* 0 given */
}
printf("Read %d positive and %d negative numbers\n", p, n);
return 0;}我的问题是,当输入某个非数字(如“a”)时,这将导致无限循环写入“->err.”再三。我猜这是一个scanf()问题,我知道这个函数可以用一个更安全的函数来代替,但是这个例子是针对初学者的,只知道printf/scanf、if-ell和循环。我已经读过答案了这个问题并略过其他问题,但没有真正回答这个具体的问题。
3 回答
PIPIONE
TA贡献1829条经验 获得超9个赞
scanf
char c = '0';if (scanf("%d", &number) == 0) { printf("Err. . .\n"); do { c = getchar(); } while (!isdigit(c)); ungetc(c, stdin); //consume non-numeric chars from buffer}
编辑:
牛魔王的故事
TA贡献1830条经验 获得超3个赞
scanf()
a
getline()
strtol()
getline()
getline()
- 3 回答
- 0 关注
- 932 浏览
添加回答
举报
0/150
提交
取消