今天用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...