c語言裡面用scanf連續輸入字元型資料常見問題

2021-07-31 01:32:11 字數 1080 閱讀 5005

#include 

#include

int main()

很簡單的乙個程式,看起來應該沒有問題,執行結果理論上應該像這樣:

但是實際上是這樣:

其中的原因就在於scanf是從標準緩衝區中讀取輸入的字元的,所以想上面那樣寫的時候字元型變數j接收的就是輸入i之後輸入的那個回車鍵。

解決方法:

1.用fflush(stdin);語句來清空緩衝區

**:

#include 

#include

int main()

這樣就可以得到想要的結果了。

2.在scanf(「%c」,&j);中的%c之前加個空格->scanf(」 %c」,&j);這樣這個空格就可以抵消那個回車。

實際上這種情況通常會出現在定義了乙個字元型資料(eg.char flag;)然後在乙個for或者while迴圈裡面會多次輸入這個flag

eg.

#include 

#include

#define maxsize 10

int main()

return

0;}

執行程式是會出現這樣的情況:

此時就可以使用上述兩個方法解決。

例外,在使用getchar()輸入字元的時候也會出現上述情況,此時除了可以用上述中方法一解決之外,對應上述的方法二可以可以改為:寫兩個getchar();

eg.

#include 

#include

int main()

這個方法的原理與上述方法二是一樣的。

C語言裡的scanf連續輸入出錯問題

今天在看 時發現乙個有趣的東西,下面看一段 可以看到輸入輸出出現了問題,那是什麼問題呢,經過網上查閱應該是快取的問題,就是說第一次輸入account時的enter回車也被快取到了裡面,所以說清一下快取就可以解決這個問題,清理剩下的快取有三種方法,分別是利用系統自帶的fflush方法 再次讀取乙個字元...

C語言使用scanf輸入

scanf 函式結構 scanf 函式被用來從stdin讀入資料,並且在程式中儲存資料。預設,這個stdin流是來著鍵盤輸入。scanf 的函式結構與printf 類似 int i scanf d i d 是乙個佔位符,說明這個地方有乙個變數,並且為整型變數 是個位址符,表明這個地方放置位址,i的意...

c語言 輸入 用scanf 實現 gets的效果

scanf 2d n 讀取最大2位整數,後面的截斷 scanf 10s str 讀取最大10位字元scanf n scanf c 使緩衝區溢位,清空 fflush stdin 重新整理緩衝區 不是很通用匹配特定字元scanf abcd 只讀取字元abcd,順序不固定,遇到其他字元結束 a z 讀取a...