清除鍵盤緩衝區

2021-05-26 13:25:54 字數 1044 閱讀 3698

關於清除鍵盤緩衝區殘餘資訊問題~迴圈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到底是什麼,結果是 c=10 ,ascii值為10是什麼?換行即\n.對了,我們每擊打一下"enter"鍵,向鍵盤緩衝區發去乙個「回車」(\r),乙個「換行"(\n),在這裡 \r被scanf()函式處理掉了(姑且這麼認為吧^_^),而\n被scanf()函式「錯誤」地賦給了c.

也就是說:scanf()和getchar()函式是從輸入流緩衝區 中讀取值的,而並非從鍵盤(也就是終端)緩衝區讀取。而讀取時遇到回車(\n)而結束的,這個\n會一起讀入輸入流緩衝區的,所以第一次接受輸入時取走字元後會留下字元\n,這樣第二次的讀入函式直接從緩衝區中把\n取走了,顯然讀取成功了,所以不會再從終端讀取!因此後面只要加上fflush(stdin)函式釋放緩衝區資料就可以了.

解決辦法:可以在兩個scanf()函式之 後加個fflush(stdin);,還有加getch(); getchar();也可以,但是要視具體scanf()語句加那個,這裡就不分析了,讀者自己去摸索吧。但是加fflush(stdin);不管什麼情況都可行。

函式名: fflush

功 能: 清除乙個流

用 法: int fflush(file *stream);#include

int main()

while(c!='n');

}   

這裡再給乙個用「空格符」來處理緩衝區殘餘資訊的示例:

執行出錯的程式:

#include

int main()

}使用了空格控制符後:

#include

int main()

}  

可以執行看看兩個程式有什麼不同。

c清除緩衝區資料

如何清空輸入緩衝區的內容 c標準規定 fflush stdout 緩 存的。對 於輸入 stdin 它是沒有定義的。但是有些編譯器也定義了 fflush stdin 的實現,比如微軟的 vc。其它編譯器是否也定義了 fflush stdin 的實現應當查詢它的手冊。gcc編譯器沒有定義它的實現,所以...

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 這樣,如果輸...