推 ledia:ch 會抓到換行字元 07/02 01:04
ch抓到\n所以印出空白行
不懂為什麼印出1 2 3 4
r怎麼沒被a給讀走@@?
※ 編輯: deepking 來自: 122.122.32.152 (07/02 01:18)
→ weiyucsie:你要不要多印個i來看看? 07/02 01:23
→ weiyucsie:因為我猜你第二次的1 2 3 4是i=2的情況 07/02 01:24
推 sinsendo:妳每次按下的所有東西,都會存放在一個緩衝區, 07/02 01:25
→ weiyucsie:因為第二次scanf我猜沒讀到東西,用舊的數值 07/02 01:26
推 VictorTom:在windows下吧, 會有\r\n兩個換行字元在stdin內.... 07/02 01:26
→ sinsendo:包含空白與按下的Enter,scanf在讀入東西的時候, 07/02 01:27
→ sinsendo:除了符合輸入類型的東西,剩下都會放回緩衝區, 07/02 01:28
→ sinsendo:所以如果先scanf("%d", x);鍵入5,x的值為5, 07/02 01:29
→ sinsendo:但是按下5之後還按了Enter,因此總共輸入了兩樣東西, 07/02 01:31
→ sinsendo:一個是5,後面那個是\n,因此再scanf("%c", ch); 07/02 01:32
→ sinsendo:就會讀到那個\n,ch裡面裝的是換行符號! 07/02 01:34
→ sinsendo:我講的很草率,不知道有沒有幫到你... (默 07/02 01:34
→ sinsendo:有請高手補完... (逃 07/02 01:34
→ deepking:謝謝大家^^,還在想接下來abcd怎沒讀到東西?是因為\r\n? 07/02 01:39
→ deepking:大大講得很詳細了@@ 喚醒久遠的記憶... 07/02 01:43
推 ledia:ch 先讀到 \n, 那個 r 還在 buffer 裡, 之後的 %lf 讀不到 07/02 10:53
→ ledia:scanf 有傳回值, 傳回他確實收到多少個輸入, 印出來看看 07/02 10:53
→ ledia:就會知道發生什麼事了 07/02 10:53
→ deepking:恩,總算懂了,現在用sscanf,方便多了! 07/02 20:44