使用scanf字元輸入時遇到的問題

2021-06-07 18:02:01 字數 698 閱讀 9744

今天用scanf給一字元陣列迴圈複製時遇到了問題

#include"stdio.h"

int main()

a[9] = '\0';

printf("%s",a);

return 0;

}發現scanf會被跳過,搜了一下網

原來scanf(或者getchar)是從標準輸入緩衝區中讀取輸入的資料,而%c的字元輸入格式會接收回車字元,在輸入第乙個scanf(或者getchar)時輸入字元後按回車結束,輸入緩衝中儲存了這個回車符,遇到第二個scanf(或者getchar)時,它自動把這個回車符賦給了ch2。而如果第二個scanf的輸入格式不是%c時,由於格式不匹配,這個回車符會被自動忽略,所以只有在連續輸入兩個%c的格式時才會出現這樣的問題!

解決方法

#include"stdio.h"

int main()

a[9] = '\0';

printf("%s",a);

return 0;

}特別注意 方法2

c和c++的標準裡從來沒有定義過 fflush(stdin)。也許有人會說用 fflush(stdin) 解決不了這個問題,某些

編譯器(如vc6)支援用 fflush(stdin) 來清空輸入緩衝,但是並非所有編譯器都要支援這個功能(linux下的gcc就不支援,經我的gcc紅帽5下測試),因為標準中根本沒有定義 fflush(stdin)。

c c 使用scanf進行字元錄入時的格式控制

scanf在從鍵盤輸入字元中讀取時本身就可以規定一定的格式,比如如果輸入乙個日期 2020 04 21,而我們想要儲存的只有三個數字,那麼我們可以使用這樣的格式控制 int year,month,day scanf d d d year,month,day 但是如果我們想以字串的形式儲存年月日就比較...

scanf函式輸入時為什麼要加

對於scanf函式,它將引數視為乙個位址,將鍵盤輸入的字元傳到這個位址中去,通常我們都是用的 位址的符號,事實上如果乙個值恰好是乙個位址的話,不加 也一樣可以的 如下例 測試環境為win7 64位 include void main int n 0x18ff48 int m 0x18ff44 檢視此...

scanf讀字元遇到的問題

最近做題發現乙個問題 scanf c ch 讀入乙個字元,輸出ascii碼的值 include using namespace std char ch intmain return0 輸出結果是 發現輸入乙個a,執行了兩次迴圈,輸出了兩個值 97是a的ascii碼的值,用cin讀 include u...