PTT
Submit
Submit
選擇語言
正體中文
简体中文
PTT
C_and_CPP
[問題] 關於清空鍵盤緩衝區
作者:
wei115
(ㄎㄎ)
2017-12-07 22:33:55
開發平台(Platform): (Ex: Win10, Linux, ...)
win10 + cygwin
編譯器(Ex: GCC, clang, VC++...)+目標環境(跟開發平台不同的話需列出)
GCC 6.4.0
問題(Question):
我想要清空緩衝區
試過fflush(stdin)[非標準] 和 setbuf(stdin, NULL)[標準]
但我剛剛寫的題目中卻發現這兩個都沒在工作,緩衝區一樣有東西沒被清空
但我用GDB除錯的時候就正常工作了....
最後我用scanf("%[^\n]*s"); getchar();就正常運作
直接用scanf("%[^\n]*s%*c"); 也有機率不工作
這是我對緩衝區有所誤解以至於我錯誤使用這些功能嗎?
還是這些函式沒有競爭力,不懂什麼叫做吃苦當吃補,都沒在作功德
謝謝
作者:
cuteSquirrel
(松鼠)
2017-12-07 22:48:00
XD
作者:
galic
(嘎利)
2017-12-07 23:20:00
scanf("%[^\n]*s")的 "*s" !?為何不用通用的 while loop 配getchar 就好
作者:
wei115
(ㄎㄎ)
2017-12-07 23:26:00
痾....比較短?
作者:
LPH66
(-6.2598534e+18f)
2017-12-08 02:35:00
回二樓, %[..]s 用來接受一個只含 [] 裡字元的字串如果 [..] 以 ^ 開頭就是接受不含這些字的字串然後那個 * 表示接受輸入但不存進變數裡咦等一下我好像弄錯了, 好像要 "%*[^\n]" 才對...我試一下嗯, 確實是要 "%*[^\n]" 才對, [..] 的地位跟 %s 的 s 一樣所以原 PO 原本的寫法變成「收一個不含換行字串進變數,再收 * s 兩個字」--但原 PO 沒給位址所以是錯的寫法這也解釋了為什麼原 PO 接 %*c 會無法作用的原因因為在「收 * 字」的時候就炸掉了
作者:
alan23273850
2017-12-08 02:42:00
http://www.programmer-club.com.tw/ShowSameTitleN
/c/43591.html1. fflush只對stdout有定義,所以不可接stdin2. setbuf是設定接下來的緩衝區模式,並不會清空之前殘留的緩衝區內容3. 網站內使用 scanf("%*[^\n]%*c");反正要清空stdin緩衝區要自己吃就對了,什麼內建函式都不要用,免得debug底到一肚子氣XD
作者:
Davinais
(水靈流喵)
2017-12-08 03:38:00
fflush不是拿來清stdin的,他在那裡沒有定義(茶
作者:
galic
(嘎利)
2017-12-08 10:43:00
c的標準沒定義沒錯 但POSIX有定義所以回到原點 還是用while loop配getchar吧 XD
繼續閱讀
[問題] 字串比較問題
MrPanda
[問題] 高斯消去求反矩陣
j0958322080
[問題] 看不懂參考書上裡面其中一段的內文
zzss2003
[討論] 請版主幫我刪文,不小心按到送出
zzss2003
[問題] 將現有的C++ lib檔,再用C wrapper成dll
james999
[問題] 在thread裡面free memory
Lipraxde
[問題] C++ 需要去上課學嗎?
x246libra
[問題] makefile問題請益
lemonsheep
[問題] arduino感應式掀蓋垃圾桶
Wjy5c1
Re: [問題] Object array在class裡的宣告方法
hichcock
Links
booklink
Contact Us: admin [ a t ] ucptt.com