C語言scanf輸入時緩衝區問題【轉載】

作者:阿巴卡
來源:CSDN
原文:https://blog.csdn.net/qq_39032310/article/details/83692746

許多同學可能在寫代碼時都遇到了關於scanf輸入時緩衝區讀取問題。
首先來對scanf爲什麼會出現這類問題進行分析,scanf函數是標準輸入流(從鍵盤接收數據),接收的數據放入輸入緩衝區中,其中就包括在鍵盤輸入的空格、回車這類字符,當你用%d接收時是不會影響的,但是用%c就會產生錯誤,這是因爲在"%c"輸入時,空格和轉義字符均作爲有效字符會被%c接收。
例如:

#include<stdio.h>
int main()
{
	char a, b, c;
	scanf("%c%c%c", &a, &b, &c);
	printf("%c,%c,%c\n", a, b, c);
	system("pause");
	return 0;
}

解決這類問題的方法:

  1. 在接收第二個數之前清空緩衝區,fflush(stdin);getch();getchar();隨便一個都可以,fflush(stdin)是全部清空,getchar()是清空一個字符,如果緩衝區還有多餘的字符則會被正常使用,
  2. 在%c之前加入空格,空格可以吸收回車符、空格。

如果是在循環中多個scanf輸入多個字符,建議使用",“進行隔開,並且在鍵盤輸入的時候也要使用”,"

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