看板 C_and_CPP 關於我們 聯絡資訊
開發平台(Platform): (Ex: VC++, GCC, Linux, ...) Code::blocks 額外使用到的函數庫(Library Used): (Ex: OpenGL, ...) 問題(Question): 照理說輸入a之後第二個scanf會接收Enter,但我照寫了一個卻不會 我宣告成int a,b 結果兩個都可以輸入第二個並沒有接收到Enter 如果宣告成char 並且輸入字元才會錯 個人認為是scanf %d的話不讀入跳行字元所以可以順利讀取另一個整數 所以我改成 { int a,b; char c,d; scanf("%d",&a); scanf("%d",&b); scanf("%c",&c); scanf("%c",&d); } 這樣子,輸入a b 後應該有兩個Enter在緩衝區給c d接收 但是我卻又可以輸入d...是我哪裡搞錯嗎? 餵入的資料(Input): 預期的正確結果(Expected Output): 錯誤結果(Wrong Output): 程式碼(Code):(請善用置底文網頁, 記得排版) int a; int b; scanf("%d",&a); scanf("%d",&b); 補充說明(Supplement): -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 61.217.32.140 ※ 編輯: asadman1523 來自: 61.217.32.140 (05/22 02:27)
firejox:你有沒有想過enter也是一個字元... 05/22 02:24
※ 編輯: asadman1523 來自: 61.217.32.140 (05/22 02:28)
purpose:我猜是因為 scanf 需要 '\n' 來結束,在 c 的時候 05/22 02:38
purpose:有兩個 '\n' 所以吸收了一個。在 d 只剩一個 '\n' 就被自 05/22 02:39
purpose:動忽略。這其實不重要,早點學 GUI 程式怎麼寫吧 05/22 02:39
diabloevagto:在%d前面加上空格就可以解決 05/22 02:50
Minilogo:非 %c 的時候 scanf 都是忽略空白類的字元的 05/22 02:55
如果都是忽略,c,d 應該都可以輸入才對,但c會略過
firejox:假如你知道用getchar的問題就可解決你的疑惑 05/22 03:12
firejox:%d是以空白字後的第一個遇到的數字開頭 以空白字前結尾 05/22 03:36
firejox:所以當數字接其他字元時就會出現問題 05/22 03:38
tropical72:scanf("%c%*c",&c), scanf("%c%*c", &d),... 05/22 03:38
loveme00835:把所有東西當字串讀進來再自己parse成想要的東西不是 05/22 09:07
loveme00835:比較好嗎? 要做檢查也很簡單, 等你搞完這個問題別人程 05/22 09:07
loveme00835:式都寫完了! 只需要善用 trim... 05/22 09:08
uranusjr:我現在才發現我的推文被修掉了... 05/22 12:09
真的嗎!? 我沒注意到!!sorry!!請再推一次!! ※ 編輯: asadman1523 來自: 61.217.32.140 (05/22 13:36) ※ 編輯: asadman1523 來自: 61.217.32.140 (05/22 13:40)
uranusjr:沒差啦其實我那時後推的跟上面一樣, 只是比較早... 05/22 13:50
uranusjr:我回一篇比較完整的給你這樣應該就會懂了 05/22 13:50