scanf()函式的引數輸入型別不匹配問題
這是我在csdn論壇上見到的問題,這個錯誤有時候會讓人莫名其妙。
#include
main()
當輸入a 回車 後,會直接跳過下面2個scanf語句,直接輸出為
123
t 原因:對於scanf( "%d%c ",&a,&c),scanf語句執行時,首先試圖從緩衝區中讀入乙個%d型別的資料,如果和
第乙個引數匹配,則繼續從緩衝區中讀取資料和第二個引數進行匹配,依次進行下去,直到匹配完所有的參
數;如果其中有乙個引數不匹配,那就從這個地方跳出,忽略這個scanf後面所有的引數,而去執行下一條語
句。 可以用下面的程式驗證一下:
#include
int main()
輸入:2 回車a 回車
結果是:
2 1
a 解決方法:scanf()函式執行成功時的返回值是成功讀取的變數數,也就是說,你這個scanf()函式有幾個變數
,如果scanf()函式全部正常讀取,它就返回幾。但這裡還要注意另乙個問題,如果輸入了非法資料,鍵盤緩
沖區就可能還個有殘餘資訊問題。
比如:
#include
main()
Scanf的輸入型別
scanf的輸入型別 1.格式字元與printf函式中的使用方式相同,以 d o x c s f e,無 u格式 g格式。2.可以指定輸入資料所佔列寬,系統自動按它擷取所需資料。3.後的 附加說明符,用來表示跳過它相應的資料。4.輸入資料時不能規定精度。5.根據格式字元的含義從輸入流中取得資料,當輸...
scanf 函式讀取型別不匹配問題
一般情況下scanf d num 會讀取乙個字元,如果該字元是數字,它便儲存該數字並讀取下乙個字元,知道遇到第乙個空白字元為止。或者遇到非數字字元,它也會停止讀入,然後scanf 函式把非數字字元放回輸入。這意味著在改程式下一次讀入時,首先讀取到的是上一次丟棄的非數字字元。在linux系統下,如果s...
scanf函式的輸入
是不是也有人和我一樣,有時候輸入達不到自己預想結果呢?又很難找到自己的錯誤,覺得輸入的格式是對的,但是儲存卻不再在自己預想的位置。下面來講一下我關於字元和數字輸入的順序和方式的認識。首先我們來看第乙個 include includevoid main 是不是感覺是乙個非常簡單的程式。但有時候不懂也是...