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

2021-08-14 09:44:30 字數 829 閱讀 9679

#include

int main()

表面上看這段程式是沒有錯的,也可以執行,但執行過程中到第二個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

連續scanf輸入字元型資料時,出現跳過輸入問題

例 include main 通過新增fflush stdin 來清空鍵盤緩衝區。include main 或者通過新增getchar 來臨時接收回車enter include main 總結 sacnf函式接收輸入資料時,遇見以下三種情況結束乙個資料當輸入 遇空格,回車,跳格鍵 遇寬度格式修飾符 ...

巢狀迴圈兩個list時出現相同欄位時的解決

s iterator value list1 s property value temp s property s iterator value list2 s property value temp s property s iterator s iterator 當出現這種情況時 list1 l...

關於在配置ssh時出現的兩個問題

b 第乙個問題 b 配置完成後,啟動tomcat,出現 i error listenerstart i 異常,就這麼幾個字,多的乙個沒有。自己沒搞定,於是上網查,熱心人不少,主要歸結原因有如下幾點 1 jar包不正確 不全 2 jar包衝突 3 xml配置檔案有誤 主要是對bean的配置 等等原因吧...