為什么scanf()會(huì)在這段代碼中導(dǎo)致無限循環(huán)?我有一個(gè)小的C-程序,它只讀取stdin的數(shù)字,每個(gè)循環(huán)一個(gè)。如果用戶輸入了NaN,則應(yīng)該將一個(gè)錯(cuò)誤打印到控制臺(tái),并且輸入提示符應(yīng)該再次返回。在輸入“0”時(shí),循環(huán)應(yīng)該結(jié)束,給定的正/負(fù)值的數(shù)目應(yīng)該打印到控制臺(tái)。下面是節(jié)目:#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;}我的問題是,當(dāng)輸入某個(gè)非數(shù)字(如“a”)時(shí),這將導(dǎo)致無限循環(huán)寫入“->err.”再三。我猜這是一個(gè)scanf()問題,我知道這個(gè)函數(shù)可以用一個(gè)更安全的函數(shù)來代替,但是這個(gè)例子是針對(duì)初學(xué)者的,只知道printf/scanf、if-ell和循環(huán)。我已經(jīng)讀過答案了這個(gè)問題并略過其他問題,但沒有真正回答這個(gè)具體的問題。
3 回答

PIPIONE
TA貢獻(xiàn)1829條經(jīng)驗(yàn) 獲得超9個(gè)贊
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貢獻(xiàn)1830條經(jīng)驗(yàn) 獲得超3個(gè)贊
scanf()
a
getline()
strtol()
getline()
getline()
- 3 回答
- 0 關(guān)注
- 980 瀏覽
添加回答
舉報(bào)
0/150
提交
取消