清理緩衝區很重要

1 void clear_stdin(void) 2 
3 { 4 
5     stdin->_IO_read_ptr = stdin->_IO_read_end; 6 
7 }
該方法是將指針指向緩衝區末尾位置,這樣就達到了清空的效果。

在C語言中,咱們經常須要去清空緩存區,對於緩存區清空的重要性,接下來咱們進行具體的說明。
首先咱們先解釋一下緩存區。緩存

1.緩存區

C語言中的緩衝區又稱爲緩存,它是內存空間的一部分。
  也就是說,在內存空間中預留了必定的存儲空間,這些存儲空間用來緩衝輸入或輸出的數據,這部分預留的空間就叫作緩衝區。
    C語緩衝區分爲三種類型:一、全緩衝 二、行緩衝 三、不帶緩衝。
  緩衝區根據其對應的是輸入設備仍是輸出設備,分爲輸入緩衝區和輸出緩衝區。spa

例如,在咱們平時要在磁盤中讀取信息的狀況下,先會把數據放到緩存區中,讀取完後,再次從磁盤中讀取信息。
緩存區,他的意義就是在高速CPU與低速的設備之間的一個區域,這個區域讓CPU工做效率更高。指針

1) 全緩衝
當填滿標準I/O緩存後才進行實際I/O操做。全緩衝的典型表明是對磁盤文件的讀寫。code

2) 行緩衝
當在輸入和輸出中遇到換行符時,執行真正的I/O操做。這時,咱們輸入的字符先存放在緩衝區,等按下回車鍵換行時才進行實際的I/O操做。典型表明是標準輸入(stdin)和標準輸出(stdout)。blog

3) 不帶緩衝
也就是不進行緩衝,標準出錯狀況stderr是典型表明,這使得出錯信息能夠直接儘快地顯示出來。內存

大部分系統默認使用下列類型的緩存:
標準出錯是不帶緩存的。
若是是涉及終端設備的流,則它們是行緩存的,不然是全緩存的。class

咱們常常用到的輸入輸出流,在目前的ANSI C 中緩存的特徵是:stdin和stdout是行緩存;而stderr是無緩存的。 效率

瞭解了這些,接下來咱們進入正題,接下來咱們要清楚爲何要清空緩存區,
這是由於在你有的時候在輸入一個字符後,在輸入一個字符,若是你不清空緩衝區,那上一個字符還在你的緩衝區內!這樣就形成錯誤了!終端

相關文章
相關標籤/搜索