1 getchar()簡介ide
getchar()是C語言中的函數,C++中也包含了該函數。getchar()函數的做用是從標準的輸入stdin中讀取字符。函數
也就是說,getchar()函數以字符爲單位對輸入的數據進行讀取。spa
2 getchar()讀取緩衝區方式3d
在控制檯中經過鍵盤輸入數據時,以回車鍵做爲結束標誌。指針
當輸入結束後,鍵盤輸入的數據連同回車鍵一塊兒被輸入到輸入緩衝區中。blog
在程序中第一次調用getchar()函數從輸入緩衝區中讀取一個字節的數據。get
須要注意的是,若是此時在程序中第二次調用getchar()函數,由於此時輸入緩衝區中還有回車鍵的數據沒有被讀出,第二個getchar()函數讀出的是回車符。it
例如以下代碼class
1 char test1 = getchar(); 2 char test2 = getchar();
此時在控制檯中輸入字符「a」而且按下回車鍵,test1的值是字符「a」,而test2的值是「\n」,如圖1所示。test
圖1 test1和test2的值
3 解決方法
能夠使用rewind()函數來清理輸入緩衝區中的數據。該函數的格式爲
void rewind( FILE* stream );
其中,參數stream表示指向FILE結構的指針,即爲指定的流。
該函數的做用是將文件指針移動到文件的起始位置處。
rewind()函數清理指定流中的錯誤指示符以及文件結束指示符。
將「2 getchar()讀取緩衝區方式」中提到的代碼修改成
1 char test1 = getchar(); 2 rewind(stdin); 3 char test2 = getchar(); 4 rewind(stdin);
在控制檯中,首先輸入字符「a」而後按下回車鍵。
getchar()函數從輸入緩衝區中讀取字符「a」,以後調用rewind()函數清理輸入緩衝區中的數據,stdin表示輸入緩衝區的指針;以後再在控制檯中輸入字符「b」,而後按下回車鍵,getchar()函數從輸入緩衝
區中讀取字符「b」,最後再次調用rewind()函數清理輸入緩衝區中的數據。
此時,test1和test2的值如圖2所示。
圖2 test1和test2的值