C語言中用scanf連續輸入兩個字元型別的問題

2021-05-24 07:21:26 字數 628 閱讀 5651

昨天用c程式設計,遇到乙個關於scanf的細節問題,假如執行如下程式:

#include

int main()

表面上看這段程式是沒有錯的,也可以執行,但執行過程中到第二個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)空格可以抵消前面輸入的回車符。

C語言中用scanf連續輸入兩個字元型別的問題

include intmain 表面上看這段程式是沒有錯的,也可以執行,但執行過程中到第二個scanf輸入值給ch2時,程式不會停止,而是直接執行到最後乙個printf 為什麼?當時百思不得其解。今天上網查了下才知道,原來scanf是從標準輸入緩衝區中讀取輸入的資料,而 c的字元輸入格式會接收回車字...

C語言中的Scanf輸入函式

1 問題描述 c語言中的scanf函式如果讀取到正確的值,也就是和scanf函式中提前設定的值的型別一致時,該值可以正確被讀入。並且scanf函式的返回值是1,通過對scanf函式的返回值的判斷就可以知道scanf函式是否讀入了正確的值。2 程式 本次使用的編譯器是vscode,測試程式是乙個把華氏...

c語言中的連續輸入問題

這個是我寫的,我覺得博文搬家有點麻煩,然後就複製貼上過來了。1.具體問題 問題的解答還有待進一步的完善 1 完整 include stdio.h struct date struct student void main 第二類 僅標黃出發生變化 scanf d t s student1.num,st...