C語言 scanf在while迴圈裡的無限迴圈
阿新 • • 發佈:2019-01-28
首先看一段程式碼
#include <stdio.h>
int main()
{
int i = 0;
int input = 0;
while (1)
{
printf("input a number:");
scanf("%d", &input);
if (input > 0)
{
printf("這是正數\n");
}
else if (input < 0)
{
printf("這是負數\n");
break;
}
}
return 0;
}
可以看出來它的意思是當輸入一個正數時,會繼續輸入,直到輸入一個負數時才停止。但是,粗心的我有一次把一個字母輸入進去了,結果為什麼會這樣呢?
scanf("%d",input);這句語句從緩衝區接受數字,而當我們輸入字母或其他時,字元就一直留在緩衝區,迴圈第二次時,scanf再次從緩衝區獲取時,還是不是數字,就相當跳過了scanf這一句......從而,造成死迴圈。
如何解決呢?
1.在scanf這一句後面加一句getchar(); 用於接受字元;
2.在scanf這一句前面加fflush(stdin); 這一函式用於清空緩衝區,但他並不適用於所有編譯器,遇到vs2015,gcc編譯器時,它就失效了