正是它在錫上所說的。有沒有辦法讓我在不使用未定義的fflush(stdin)或循環getchar()的情況下清空輸入緩衝區,爲進一步的用戶輸入做準備?如何沖洗輸入緩衝區? (C)
我試圖寫一個小的輸入功能,是不是容易受到緩衝區溢出。爲此,我使用了fgets(entered_text,30,stdin);按照承諾運作。
然而,在溢出的情況下,我留在,當我下一次調用輸入功能,都讀取輸入緩衝區的東西。我想清空緩衝區以避免這種情況。
fflush(標準輸入)被支持,但沒有定義。 http://c-faq.com/stdio/stdinflush2.html建議我使用getchars循環,但問題是,如果輸入緩衝區爲空,它將請求一個字符並迫使我按兩個'enter'。
有沒有辦法爲我檢查,如果輸入緩衝器是空的,或通過其他方式空嗎?
在此先感謝。
如果'fgets'不能存儲所有的數據,那麼最後一個字符不會是'\ n',這意味着你可以繼續讀取更多的數據。我從來不明白爲什麼人們認爲他們需要在這種情況下「沖洗輸入緩衝區」。很容易看到是否有更多的數據。繼續閱讀字符,直到出現'\ n'或EOF。這是唯一的兩種可能性(否則它是一個正常字符)。 – Brandin
這將做的工作:http://stackoverflow.com/a/21709726/694576 – alk