No.17 清除scanf()函數的緩衝區

scanf()是C語言中一個重要的輸入函數。但是在使用不當時會給程序帶來很大的漏洞。在這裏,我想就scanf()的緩衝區問題做一簡單的論述。

首先,先看以下代碼:

#include <stdio.h>

int main()
{
	int count = 0 ;
	char ch = 0 ;
	while(count < 3)
	{
		printf("請輸入:") ;
		scanf("%c", &ch) ;
		count++ ;
	}
	return 0 ;
}

運行結果:
在這裏插入圖片描述

這個運行結果與我的初衷不同。本想通過這個while循環來控制輸入三次後結束。可是第二次光標並沒有停留,直接跳到了第“三”次輸入,這是因爲scanf()函數有個緩衝區。在第一次輸入A後,還有個回車符 在scanf()函數的緩衝區裏,循環到第二次時,直接把這個“回車符”送給了scanf(),所以用戶並的輸入直接跳到了第三步。或者是一次性輸入3個字符甚至更多,程序就會直接執行完畢。道理同上。請看以下運行結果:
在這裏插入圖片描述
解決這個問題的方法就是要在每次輸入後清除掉緩衝區裏的剩餘內容。請看以下代碼:

#include <stdio.h>

int main()
{
	int count = 0 ;
	char ch = 0 ;
	while(count < 3)
	{
		printf("請輸入:") ;
		scanf("%c", &ch) ;
		while ((ch = getchar()) != EOF && ch != '\n') ; //清除緩衝區的內容
		count++ ;
	}
	return 0 ;
}

運行結果:
在這裏插入圖片描述

這樣就可以正常地進行輸入了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章