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

作者: laiDark (煎餃加賴)   2014-12-12 14:55:41
使用: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
還請各位大神指點一下小弟 感謝!!
作者: Zero0910 (みくに最高≧▽≦)   2014-12-12 15:27:00
scanf+%s就是會吃到空白或換行才停止 除非是指定字串長度 例如%3s才會只會吃3個字元
作者: salavida (席阿)   2014-12-12 16:20:00
scanf("%d%*c%[A-Za-z]%*c%d",&y,input,&d);
作者: laiDark (煎餃加賴)   2014-12-12 21:38:00
哦哦 原來%s還有這種可以控制吃幾個字元的技巧 感謝Z大!!s大提供的方法超強的!!!! 真的可以順利印出我預期的結果超級感激salavida大的!!! (鞠躬)
作者: MIKEmike07 (加油!)   2014-12-13 09:50:00
%*c 加*就是會忽略

Links booklink

Contact Us: admin [ a t ] ucptt.com