Linux下如何清空輸入緩衝區

2021-07-07 01:52:06 字數 822 閱讀 5844

今天在linux下編寫資料結構課程的乙個旅遊管理程式時,遇到了一些有關鍵盤輸入緩衝區的問題。

使用scanf函式進行等待使用者輸入時,使用者輸入完會在緩衝區裡遺留乙個換行符 '\n',如果不清除掉這個換行符,就會在下一次的scanf中被作為輸入,直接跳過,不會等待使用者的輸入,所以,一般在呼叫scanf後一定要清除緩衝區。

開始,我使用fflush(stdin)進行清空,因為在windows下使用過這個函式,但是我發現根本沒有任何效果,並無法清空輸入緩衝區。後來查了下,原來在linux下,fflush()只能針對輸出緩衝區,對輸入緩衝區不起作用。

後來,網上有人說,使用setbuf(stdin,null)可以在linux下清空輸入緩衝區,我在centos 6.7(64位)的環境下嘗試了下,發現根本不起效果,還是無法清空輸入緩衝區,暫時不知道原因,反正就是沒有用。

最後,還是使用了getchar()函式接收掉了換行符,發現確實可以,很高興。getchar()實測linux下可以使用。但是只能接收掉乙個字元。

使用while迴圈配合getchar()可以克服這個缺點:

while((ch=getchar())!=eof);

這句話將清除輸入緩衝區stdin中的內容,直到讀完緩衝區。

總之,在linux下清空輸入緩衝區,fflush(stdin)是絕對沒有效果的,而setbuf(stdin,null)在我上面所說的環境下,也是沒有效果的。

因此,getchar()成為可用的乙個方案,搭配while可以實現清空輸入緩衝區。

清空輸入緩衝區

清空輸入緩衝區 cin.clear 清除錯誤標記,比如要求輸入int型,但我們輸入了char型,就會導致輸入錯誤,產生錯誤標記 cin.sync 清空輸入緩衝區 cin.ignore n,ch 第乙個引數是清空輸入緩衝區的大小,第二個引數是終止字元 注 終止字元也會被丟棄 常用形式有以下兩種 cin...

Linux程式設計 清空標準輸入緩衝區

linux程式設計的時候需要清空標準輸入緩衝區,於是使用了如下windows程式設計中的方法 1.fflush stdin 這個fflush 函式根本不是標準c中的函式,只是標準c的擴充套件,所以在linux中使用根本不行 2.中網上搜尋了下,發現有建議使用rewind stdin 這個函式其實是將...

輸入緩衝區與輸出緩衝區

本博文通過一段程式來理解輸入緩衝區與輸出緩衝區。程式如下 author wanghao created time thu 17 may 2018 06 03 12 ampdt file name test.c description include int main int argc,const c...