Re: [問題] 關於FLUSH的問題
看板C_and_CPP (C/C++)作者LPH66 ((short)(-15074))時間16年前 (2009/08/18 16:32)推噓1(1推 0噓 0→)留言1則, 1人參與討論串2/2 (看更多)
你要先理解輸入串列這個概念
你所輸入進去的東西 在電腦中會視為一串連續的字
這包含了你的 Enter 鍵等等的輸入
scanf 只是往後去拿出一個你所需要的東西出來
在碰到不是它要的東西的時候
scanf 除了停下來外 還會把這個不是它要的東西給留在輸入串列裡
因此在問題一中 你如果輸入 ?
由於 scanf 發現 ? 不是你要的 所以把 ? 留在裡面後回傳
如果不清除的話 之後就會一直讀到那個 ? 一直輸入錯誤
問題二也是 你輸入 n 之後 後面至少還留了你按的那個 Enter (即 '\n')
於是也是要把後面清掉之後再做輸入 以防那個 Enter 影響到程式其他地方需要的東西
講到這裡 再回頭講 FLUSH 這個 macro
你仔細看之後就會發現 它的作用是一直從輸入串列中讀字
讀到讀進 '\n' 時才停止
這就是幫你把輸入串列中尾巴剩下到你按換行為止的東西全部讀進來
---
至於為什麼有時候不清不會有事
那是因為許多 scanf 的格式會自動忽略在你要的東西前面的空白及換行
(嚴格說來是 whitespace 啦 不過在這裡只要知道它包含空白和換行就好)
包括所有輸入數字的格式以及 %s 都會
而 scanf("%c"...) 則和 getchar() 一樣是不會去忽略那些東西的
所以有時不清不會出事 有時不清會出事 就是那些留在串列裡的 Enter 的關係
--
[LPH] Oops, your OOP's a problem? 說:
你現在還是看不到狗?
************* 說:
看得到 只是 他們不會跑 就一直呆呆在那邊 一直在起點
[LPH] Oops, your OOP's a problem? 說:
你要按"ㄅㄧㄤˋ"它們才會跑啊@@"
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.112.250.80
推
08/18 18:41, , 1F
08/18 18:41, 1F
討論串 (同標題文章)
完整討論串 (本文為第 2 之 2 篇):
1
2
C_and_CPP 近期熱門文章
PTT數位生活區 即時熱門文章