您的位置:首頁>正文

C語言緩衝區是個什麼鬼?C語言解析“奇怪”字元輸入問題,你是否遇到

對C語言的瞭解, 而不只是單單的在課本中學到的那些理論, 平時乏味的課程, 通過自己動手親自編寫, 變的生動有趣,

而在自己動手的過程中,

出現的問題很多, 比理論要難的多, 當一個程式寫完以後, 經常會有很多錯誤而沒法解決。

不過, 通過幾天的實戰, 逐漸積攢了一些經驗, 有些錯誤可以很快就看出來。 學習進步,少俠請駐足:C/C++ 學習交流, 491994603(8群 )

我們經常在編寫C語言基礎代碼的時候,會遇到如下現象:

更多資料,少俠請駐足:C/C++ 學習交流, 8群 491994603

為什麼會這樣呢?那是因為scanf是從緩衝區中通過格式控制字元獲取字元,而第一次輸入,輸入100 按下回車(),
%d只能沖緩衝區中獲取一個100,剩下的一個字元還在緩衝區,而第二次輸入,直接從緩衝區中換取了,所以字元直接為''.示意圖:

更多資料,少俠請駐足:C/C++ 學習交流, 8群 491994603

如何避免?

通過stdlib.h中的fflush函數清空緩衝區

更多資料,少俠請駐足:C/C++ 學習交流, 8群 491994603

2.巧用getchar獲取剩餘字元

更多資料,少俠請駐足:C/C++ 學習交流, 8群 491994603

緩衝區有意思的東西

控制台視窗是有輸入緩衝區的, 當你按鍵後程式沒有來得及處理, 系統會將按鍵緩存, 等到程式獲取按鍵的時候, 系統會把緩衝區裡面之前的按鍵返回。

更多資料,少俠請駐足:C/C++ 學習交流, 8群 491994603

請自己執行一下前面的程式, 在 5 秒延時內隨便按鍵, 等到延時結束, 可以看到程式可以讀出剛才的按鍵。

但是有些時候, 我們是不需要保留之前的按鍵的。 我們可以借助 Windows 提供的控制台 API 實現:

更多資料,少俠請駐足:C/C++ 學習交流, 8群 491994603

這段代碼只在前面代碼的基礎上,增加了一行清空鍵盤緩衝區的函式呼叫。然後執行程式後可以看到,最後的輸出迴圈無法獲取到之前的任何按鍵。今天分享就到這裡結束了,歡迎長久駐足哦. 8群 491994603.學習交流.

這個功能在遊戲中會很有用。例如,遊戲開始之前,會有些等待(例如過場動畫)。正式遊戲開始時,應該清空按鍵緩衝區,防止使用者在等待期間的按鍵影響遊戲操作。

更多資料,少俠請駐足:C/C++ 學習交流, 8群 491994603

這段代碼只在前面代碼的基礎上,增加了一行清空鍵盤緩衝區的函式呼叫。然後執行程式後可以看到,最後的輸出迴圈無法獲取到之前的任何按鍵。今天分享就到這裡結束了,歡迎長久駐足哦. 8群 491994603.學習交流.

這個功能在遊戲中會很有用。例如,遊戲開始之前,會有些等待(例如過場動畫)。正式遊戲開始時,應該清空按鍵緩衝區,防止使用者在等待期間的按鍵影響遊戲操作。

同類文章
Next Article
喜欢就按个赞吧!!!
点击关闭提示