C標準輸入之傷

2021-09-06 08:54:18 字數 851 閱讀 3948

剛學c的時候,遇到如下問題:

scanf("%d", n);

scanf("%c", ch);

本來我應該要按兩次回車輸入才結束吧。可是每次我輸入乙個整數,然後按回車準備輸入乙個字元的時候,輸入就結束了。

這個問題鬱悶了好久。書上也沒講。後來找到了方法,在scanf("%d", n)之後呼叫fflush(stdin)來重新整理輸入緩衝。再後來,看到了

更好的解決方法:

scanf("%d%*c", &n);

scanf("%c", &ch);

後來遇到了另乙個問題

scanf("%s", str1);

gets(str2)

這和上面類似。第一次回車之後,str2接收了乙個空串。也可以在之前用fflush(stdin)來解決。或者:

scanf("%s%*c", str1);

gets(str2);

還可以scanf("%s", str1);

getchar();

gets(str2);

總的說來,%c會把輸入緩衝中的第乙個字元做為輸入。gets()在遇到緩衝中第乙個'\n'是結束輸入。

一直習慣用fflush(stdin)來解決上面遇到的問題,直到有一次,做acm的題,本來題很簡單,可是我提交了10來次,

改了又改,還是wa。抓狂~~~

後來對照別人的**發現就是這個fflush(stdin)的區別。想來是fflush並不只是把上一次輸入的回車清楚掉,還把後面

的緩衝也清楚掉了。這造成輸入資料不完整,所以一直wa。都是沒有充分理解fflush(stdin)和當前環境造成的。

ps:要知其然還要知其所有然,要不然遇到問題時候,經常無從下手。懂得原理,以不變應萬變。

C 之標準輸入輸出

由於在公司,無法上傳,往後補上。關於c 的標準輸入輸出,其實就相當於c語言的scanf和printf,只不過c 用cin和cout這樣稱為流的機制。include 使用時需包含標頭檔案 using namespace std int main void int a 255 cout 相當於 c語言中...

C 標準輸入

cin是c 程式語言中的標準輸入流物件,即istream類的物件。cin主要用於從標準輸入讀取資料,這裡的標準輸入,指的是終端的鍵盤。此外,cout是流的物件,即ostream類的物件,cerr是標準錯誤輸出流的物件,也是ostream 類的物件。這裡的標準輸出指的是終端鍵盤,標準錯誤輸出指的是終端...

C 的標準輸入

昨天做題的時候,遇到乙個輸入是這樣的 3 4aaaa aaaa aaaa bbbbbbb bbbb ccc cccccccc d第一行輸入乙個整數n,表示接下來句子的數量,和另外乙個整數 這裡沒有作用,只是用來說明下面的乙個情況 接下來就是n個句子,每個句子以回車結束。我的想法是 int i,j c...