1. 程式人生 > >Linux下標準緩衝區的清空

Linux下標準緩衝區的清空

當我們在使用scanf()函式讀取標準輸入時,其結果並不總是正確。有時,為了防止緩衝區資料對結果的影響,我們需要清空標準緩衝區。首先我們得知道在LINUX下標準I/O為我們提供了那幾中型別的緩衝區。

標準I/O庫提供了3種類型的緩衝。

1.全緩衝:在這種情況下,只有在填滿緩衝區後才進行實際的I/O操作。

2.行緩衝區:當輸入和輸出遇到換行符時,標準I/O庫才進行實際的I/O操作。

3.不帶緩衝:標準I/O不對字元進行緩衝儲存。標準錯誤輸出通常是不帶緩衝的,使得錯誤資訊可以儘快顯示出來。

相關函式.

(1).flush(stdin)

flush函式,不是標準c庫中的函式,只是標準c的擴充套件,在Linux下使用該函式時,無法達到清除緩衝區的效果。

(2).getchar() getchar()函式一次讀取一個字元

while('\n' != (getchar()))通過讀取stdin中的資料並丟棄的方式,來清空緩衝區。在Linux下可以實現清除緩衝區的效果。

(3).setbuf(FILE *restrict fp,char *restrict fp)

      setvbuf(FILE *restrict fp,char *restrict buf,int mode,size_t size)更改緩衝區型別

通過呼叫這兩個函式,直接將緩衝區清空。在Linux下可以實現清除緩衝區的效果。

(4)fgets(char *buf,int n,FILE *stream)

該函式與getchar清空緩衝區類似。在Linux下可以實現清除緩衝區的效果。