c清除緩衝區資料

2021-07-06 08:14:26 字數 3169 閱讀 5117

如何清空輸入緩衝區的內容

c標準規定 

fflush()

stdout)緩

存的。對

於輸入(

stdin

),它是沒有定義的。

但是有些編譯器也定義了 

fflush( stdin )

的實現,比如微軟的

vc。其它編譯器是否也定義了 

fflush( stdin )

的實現應當查詢它的手冊。

gcc編譯器沒有定義它的實現,所以不能使用 

fflush( stdin )

來重新整理輸入快取。對於

沒有定義

fflush(

stdin)的

編譯器,

可以使用

fgets()函式

來代替它

(比用 getchar()

、scanf()

等函式通用性好)。比如樓主提供的第乙個程式中可以這樣忽略輸入流中

留下的回車等其它輸入,從而使下一次的輸入總保持乙個「乾淨」的狀態。

[code]

// ...

char sbuf[1024];

// ...

// fflush(stdin); // 

用下面一句代替

fgets( sbuf, 1024, stdin );

// ...

在linux

程式設計的時候需要清空標準輸入緩衝區,於是使用了如下

windows

程式設計中

的方法:

1.fflush(stdin)

;這個fflush()

函式根本不是標準

c中的函式,只是標準

c的擴充套件,所以在

linux

中使用根本不行;

2.中網上搜尋了下,發現有網友建議使用

rewind(stdin)

;這個函式其實是將指標指向流的開

始處。但是它是檔案操作中的乙個函式,操作的是

file

型流,在

windows

程式設計中是

可以清空標準輸入緩衝區的,但是在

linux

中不行。3.通

過讀完標

準緩衝區

中的剩餘

字元並丟

棄掉來清

空標準緩

沖區,使

用的函式

是getchar()

,此函式的作用是從標準輸入緩衝區中讀出乙個字元,此方法中

linux

中可行。

如果需要清除

stdin

可以通過如下迴圈實現:

char ch;

while((ch=getchar())!='\n'&&ch!=eof);

以上語句將清除

stdin

中的字元,知道遇到換行符或者是讀完緩衝區。

以上的方法均可以在

windows

程式設計中用來清除緩衝區;4.在

linux

程式設計中也還是有一種用來清空

stdin

中的方法,直接呼叫如下的函式:

如何清空輸入緩衝區的內容

c標準規定 

fflush()

函式是用來重新整理輸出

(stdout)緩

存的。對

於輸入(

stdin

),它是沒有定義的。

但是有些編譯器也定義了 

fflush( stdin )

的實現,比如微軟的

vc。其它編譯器是否也定義了 

fflush( stdin )

的實現應當查詢它的手冊。

gcc編譯器沒有定義它的實現,所以不能使用 

fflush( stdin )

來重新整理輸入快取。對於

沒有定義

fflush(

stdin)的

編譯器,

可以使用

fgets()函式

來代替它

(比用 getchar()

、scanf()

等函式通用性好)。比如樓主提供的第乙個程式中可以這樣忽略輸入流中

留下的回車等其它輸入,從而使下一次的輸入總保持乙個「乾淨」的狀態。

[code]

// ...

char sbuf[1024];

// ...

// fflush(stdin); // 

用下面一句代替

fgets( sbuf, 1024, stdin );

// ...

在linux

程式設計的時候需要清空標準輸入緩衝區,於是使用了如下

windows

程式設計中

的方法:

1.fflush(stdin)

;這個fflush()

函式根本不是標準

c中的函式,只是標準

c的擴充套件,所以在

linux

中使用根本不行;

2.中網上搜尋了下,發現有網友建議使用

rewind(stdin)

;這個函式其實是將指標指向流的開

始處。但是它是檔案操作中的乙個函式,操作的是

file

型流,在

windows

程式設計中是

可以清空標準輸入緩衝區的,但是在

linux

中不行。3.通

過讀完標

準緩衝區

中的剩餘

字元並丟

棄掉來清

空標準緩

沖區,使

用的函式

是getchar()

,此函式的作用是從標準輸入緩衝區中讀出乙個字元,此方法中

linux

中可行。

如果需要清除

stdin

可以通過如下迴圈實現:

char ch;

while((ch=getchar())!='\n'&&ch!=eof);

以上語句將清除

stdin

中的字元,知道遇到換行符或者是讀完緩衝區。

以上的方法均可以在

windows

程式設計中用來清除緩衝區;4.在

linux

程式設計中也還是有一種用來清空

stdin

中的方法,直接呼叫如下的函式:

清除鍵盤緩衝區

關於清除鍵盤緩衝區殘餘資訊問題 迴圈scanf 可能導致直接讀入 n.include int main while c n scanf c c 這句不能正常接收字元,什麼原因呢?我們用printf c d n c 將c用int表示出來,啟用 printf c d n c 這一句,看看scanf 函式...

C語言清除輸入緩衝區

在使用scanf輸入時,如果輸入不合法,此時可以檢查其返回值為0,但下次再呼叫時,上次不合法的輸入,還在輸入緩衝區中,此時就會接著不合法,如下 include int main int argc,char argv printf you input is d n id return 0 這樣,如果輸...

C語言清除輸入緩衝區

在使用scanf輸入時,如果輸入不合法,此時可以檢查其返回值為0,但下次再呼叫時,上次不合法的輸入,還在輸入緩衝區中,此時就會接著不合法,如下 include int main int argc,char argv printf you input is d n id return 0 這樣,如果輸...