1. 程式人生 > >C語言 scanf在while迴圈裡的無限迴圈

C語言 scanf在while迴圈裡的無限迴圈

首先看一段程式碼

#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編譯器時,它就失效了