1. 程式人生 > >連續兩個scanf()時,可能出現的錯誤

連續兩個scanf()時,可能出現的錯誤

#include
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); //在%號前面加一個空格,空格可以抵消前面輸入的回車符。

ps:本題其實不用那麼麻煩,scanf("%c%c",&ch1,&ch2);一句就可以搞定了,上面只是介紹下解決問題的方法。

        scanf格式輸入時要求輸入格式與格式控制符中的完全一樣,例如:scanf("abcd%c",&ch);輸入時必須輸入abcde,ch得到的值才為e。

另外:

1.scanf("%d%d",&x,&y);時,輸入必須為10 20(注:10和20之間要用空格,回車或TAB鍵之中的任選一種隔開)

2.scanf("%d,%d",&x,&y);時,輸入必須為10,20

3.scanf("%d+%d",&x,&y);時,輸入必須為10+20