昨天用C編程,遇到一個關於scanf的細節問題,假如運行如下程序:
#include<stdio.h>
int main()
{
char ch1,ch2;
printf("Input for ch1:/n");
scanf("%c",&ch1);
printf("ch1=%c/n",ch1);
printf("Input for ch2:/n");
scanf("%c",&ch2);
printf("ch2=%c/n",ch2);
}
表面上看這段程序是沒有錯的,也可以運行,但運行過程中到第二個scanf輸入值給ch2時,程序不會停止,而是直接運行到最后一個printf !
為什么?當時百思不得其解。。。
今天上網查了下才知道,原來scanf是從標准輸入緩沖區中讀取輸入的數據,而%c的字符輸入格式會接收回車字符,在輸入第一個scanf時輸入字符后按 回車結束,輸入緩沖中保存了這個回車符,遇到第二個scanf時,它自動把這個回車符賦給了ch2。而如果第二個scanf的輸入格式不是%c時,由於格 式不匹配,這個回車符會被自動忽略,所以只有在連續輸入兩個%c的格式時才會出現這樣的問題!
解決辦法:(二辦法任選其一)
1。清空輸入緩沖區
第一個scanf后加入語句:fflush(stdin); //C語言清空輸入緩沖區函數
2。格式控制中加入空格
將第二個scanf改為:scanf(" %c",&ch2);//在%號前面加一個空格
scanf格式輸入時要求輸入格式與格式控制符中的完全一樣(如:scanf("abcd%c",&ch);輸入時必須輸入abcde,ch得到的值為e)空格可以抵消前面輸入的回車符。