作者:阿巴卡
來源: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;
}
解決這類問題的方法:
- 在接收第二個數之前清空緩衝區,fflush(stdin);getch();getchar();隨便一個都可以,fflush(stdin)是全部清空,getchar()是清空一個字符,如果緩衝區還有多餘的字符則會被正常使用,
- 在%c之前加入空格,空格可以吸收回車符、空格。
如果是在循環中多個scanf輸入多個字符,建議使用",“進行隔開,並且在鍵盤輸入的時候也要使用”,"