scanf 「 c」 等問題,清空輸入輸出快取

2021-08-07 08:57:42 字數 801 閱讀 7089

c語言學習者經常會遇到printf()和scanf()的一些問題,沒有正確輸出或者輸入。

例如scanf(「%c」,&ch)沒有接收到輸入字元。或者輸出printf(「\n」)不會換行的問題。

舉個例子:

#include int main()

上面這個**執行出錯:

原因

清除上乙個scanf的快取,因為它接受了乙個數字和回車符號,不然下乙個scanf()用%c接受字串的時候, 會將上乙個的回車符接收到,而不會停下來去等待使用者去輸入乙個字元。

getchar();//或者適用getchar去接受上乙個的回車符

fflush(stdin);//非標準c,linux下不適用,windows可以使用

setbuf(stdin,null);//將輸入緩衝區清空,linux適用

正確的**:

#include int main()

//scanf("%c",&person[i]);

scanf(" %c",&person[i]);//或者先去用乙個空格去把上乙個的回車符匹配掉也可以。

return 0;

}

備註:輸入緩衝區是stdin,輸出緩衝區是stdou

串列埠清空輸入輸出快取

在我們的工作中,串列埠是一種比較常用的資料傳輸方式。在某些應用場景下,當程式啟動並開啟串列埠後,我們不希望讀出串列埠開啟之前的輸入快取資料 即核心驅動已接收但是並未被應用層讀出的資料 因此需要對輸入快取資料進行清空 刷清 丟棄 操作。下面以linux系統上串列埠程式設計為例進行說明 測試環境 硬體環...

opencv(一) 輸入輸出等簡單操作

mat 兩個資料部分組成的類 矩陣頭 包含資訊有矩陣的大小,用於儲存的方法,矩陣儲存的位址等 和乙個指標,指向包含了畫素值的矩陣 可根據選擇用於儲存的方法採用任何維度儲存資料 矩陣頭部的大小是恆定的。然而,矩陣本身的大小因影象的不同而不同,通常是較大的數量級。下面是一些簡單操作 mat a,c 僅建...

輸入輸出標頭檔案等規範

1.char a 10 scanf s a 如果想讓輸入字串的首字元從a 1 開始儲存 scanf s a 1 char b 10 5 for int i 0 i 10 i 主函式呼叫 call a,n 被呼叫函式 void call int a 2 int n 9.scanf對於float型別必須...