[問題] 兩個scanf問題

看板C_and_CPP作者 (笨板走天下)時間13年前 (2011/05/22 02:19), 編輯推噓2(2014)
留言16則, 7人參與, 最新討論串1/2 (看更多)
開發平台(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)

05/22 02:24, , 1F
你有沒有想過enter也是一個字元...
05/22 02:24, 1F
※ 編輯: asadman1523 來自: 61.217.32.140 (05/22 02:28)

05/22 02:38, , 2F
我猜是因為 scanf 需要 '\n' 來結束,在 c 的時候
05/22 02:38, 2F

05/22 02:39, , 3F
有兩個 '\n' 所以吸收了一個。在 d 只剩一個 '\n' 就被自
05/22 02:39, 3F

05/22 02:39, , 4F
動忽略。這其實不重要,早點學 GUI 程式怎麼寫吧
05/22 02:39, 4F

05/22 02:50, , 5F
在%d前面加上空格就可以解決
05/22 02:50, 5F

05/22 02:55, , 6F
非 %c 的時候 scanf 都是忽略空白類的字元的
05/22 02:55, 6F
如果都是忽略,c,d 應該都可以輸入才對,但c會略過

05/22 03:12, , 7F
假如你知道用getchar的問題就可解決你的疑惑
05/22 03:12, 7F

05/22 03:36, , 8F
%d是以空白字後的第一個遇到的數字開頭 以空白字前結尾
05/22 03:36, 8F

05/22 03:38, , 9F
所以當數字接其他字元時就會出現問題
05/22 03:38, 9F

05/22 03:38, , 10F
scanf("%c%*c",&c), scanf("%c%*c", &d),...
05/22 03:38, 10F

05/22 09:07, , 11F
把所有東西當字串讀進來再自己parse成想要的東西不是
05/22 09:07, 11F

05/22 09:07, , 12F
比較好嗎? 要做檢查也很簡單, 等你搞完這個問題別人程
05/22 09:07, 12F

05/22 09:08, , 13F
式都寫完了! 只需要善用 trim...
05/22 09:08, 13F

05/22 12:09, , 14F
我現在才發現我的推文被修掉了...
05/22 12:09, 14F
真的嗎!? 我沒注意到!!sorry!!請再推一次!! ※ 編輯: asadman1523 來自: 61.217.32.140 (05/22 13:36) ※ 編輯: asadman1523 來自: 61.217.32.140 (05/22 13:40)

05/22 13:50, , 15F
沒差啦其實我那時後推的跟上面一樣, 只是比較早...
05/22 13:50, 15F

05/22 13:50, , 16F
我回一篇比較完整的給你這樣應該就會懂了
05/22 13:50, 16F
文章代碼(AID): #1Ds08zzH (C_and_CPP)
討論串 (同標題文章)
文章代碼(AID): #1Ds08zzH (C_and_CPP)