[问题] 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