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型別必須...