scanf清除快取區

2022-08-31 12:03:09 字數 812 閱讀 9265

為什麼需要清除scanf快取區呢?看乙個例子:

int

main()

以上是乙個很簡單的例子,輸入兩個整型數再列印出來,看起來的確很簡單,也沒啥問題。

但是如果第乙個(即a)輸入的不是整型,比如字元或字串呢?這樣的話第二個(即b)就不會讓使用者輸入而直接程式結束了。

又如以下程式:

int

main()

或者如下程式:

int

main()

程式的本意很簡單,就是從鍵盤讀入兩個字元,然後列印出這兩個字元的ascii碼值。可是執行程式後會發現出了問題:當從鍵盤輸入乙個字元後,就列印出了結果,根本就沒有輸入第二個字元程式就結束了。例如使用者輸入字元'a', 列印結果是97,10。這是為什麼呢?

【分析】

scanf() 和getchar()函式是從輸入流緩衝區中讀取值的,而並非從鍵盤(也就是終端)緩衝區讀取。而讀取時遇到回車(n)而結束的,這個n會一起讀入輸入流緩衝區的,所以第一次接受輸入時取走字元後會留下字元n,這樣第二次的讀入函式直接從緩衝區中把n取走了,顯然讀取成功了,所以不會再從終端讀取!其實這裡的10恰好是回車符!這就是為什麼這個程式只執行了一次輸入操作就結束的原因!

【解決辦法】

從輸入快取區讀取後,清除掉之前的快取。

fflush(stdin);//這種在vs和clion上不成功

rewind(stdin);

比如:

int

main()

C語言如何清除scanf 快取

1 清除快取的函式是 void safe flush file fp 2 然後我們在使用的時候,直接呼叫就可以了 scanf d k safe flush stdin 這樣就可以清除快取帶來的問題了!3 案例演示 a.當我們不清除scanf所帶來的危害的時候 include include int ...

AJAX清除快取

在使用ajax作web開發時,往往會存在一些莫名其妙的問題。如,第一次的ajax請求是正常的,而第二次為什麼就不正常了呢,而且往往會出現於第一次請求同樣的結果。其實這是因為ajax第一次請求確實是傳送到了伺服器,而第二次並沒有真的發到伺服器,而是從ie的快取中讀取的。那麼如何解決這一問題呢?方法很簡...

iis清除快取

看一下 http 協議,您會發現從伺服器返回的 http 頭裡面能定義這樣一條命令 cache control no cache。這個就是我們解決問題的辦法。讓我們來看看該如何通過 iis 配置管理工具來把這條命令新增到每次伺服器的 http 返回頭里吧。第二步 選擇 http 頭 tab 標籤,然...