[問題] scanf("%d-%s-%d)的%s 將後面的%d值吃了?

看板C_and_CPP作者 (Laxrry)時間9年前 (2014/12/12 14:55), 編輯推噓3(304)
留言7則, 4人參與, 最新討論串1/1
使用:CodeBlock C語言 小弟在解一題目 在輸入格式這邊就整個卡住了 題目中有要求輸入的格式必須為 yyyy-month-dd 其中 yyyy為年分 month為英文月份 dd為日期 比如: 1984-December-30 我立馬想到要寫這樣 http://codepad.org/WCK64uaP 第18行的printf 我要確認值的狀況 結果跑出來的是這樣 http://ppt.cc/7~F9 然後我印出每個變數的狀況 http://codepad.org/cr7k9Jlo http://ppt.cc/81J8 發現我輸入原應該是要給最後面%d的 竟然被%s吃掉了!!!!! 以致我的d變數是垃圾值..... 我朋友給我的方法是不要用字串 用字元+迴圈 像這樣 http://codepad.org/dRSJ72dJ 印出的結果 的確跟輸入的一樣 http://ppt.cc/PYMu 我的問題點是 以後%s後面若要接%d 就要捨棄不用%s 改用字元? 是否有其他方法可以避免%s把後面的%d吃掉? 還是說就只有 字元+迴圈 這招...? (因為我還是比較想要用字串....) 我本來有想過要 scanf("%d-%s-",&y,input); scanf("%d",&d); 像這樣拆成兩行 不過印出來結果還是失敗orz 還請各位大神指點一下小弟 感謝!! -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 140.123.240.79 ※ 文章網址: http://www.ptt.cc/bbs/C_and_CPP/M.1418367346.A.71A.html

12/12 15:27, , 1F
scanf+%s就是會吃到空白或換行才停止 除非是指定字串長
12/12 15:27, 1F

12/12 15:28, , 2F
度 例如%3s才會只會吃3個字元
12/12 15:28, 2F

12/12 16:20, , 3F
scanf("%d%*c%[A-Za-z]%*c%d",&y,input,&d);
12/12 16:20, 3F

12/12 21:38, , 4F
哦哦 原來%s還有這種可以控制吃幾個字元的技巧 感謝Z大!!
12/12 21:38, 4F

12/12 21:39, , 5F
s大提供的方法超強的!!!! 真的可以順利印出我預期的結果
12/12 21:39, 5F

12/12 21:40, , 6F
超級感激salavida大的!!! (鞠躬)
12/12 21:40, 6F

12/13 09:50, , 7F
%*c 加*就是會忽略
12/13 09:50, 7F
文章代碼(AID): #1KYf5oSQ (C_and_CPP)