[问题] scanf及fflush的问题?

楼主: sr29 (owo)   2015-06-19 18:21:18
开发平台(Platform): (Ex: VC++, GCC, Linux, ...)
GNU GCC using Code::Blocks
额外使用到的函数库(Library Used): (Ex: OpenGL, ...)
none
问题(Question):
在循环中的scanf标准化输入中如果是scanf("%lf,%lf",&num1,&num2)
则会正常读入
若是改成scanf("(%lf,%lf)",&num1,&num2)
则会出现错误(只能读入第一次的内容)
若是加入fflush(stdin)就会需要多输入一个空白
循环外有一个printf、一个scanf、再一个printf
完整的程式码在这边 http://paste.plurk.com/show/2189312/
喂入的资料(Input):
3 (1,2) (3,4) (5,6)
预期的正确结果(Expected Output):
1 2
3 4
5 6
错误结果(Wrong Output):
1 2
1 2
1 2
程式码(Code):(请善用置底文网页, 记得排版)
http://paste.plurk.com/show/2189312/
补充说明(Supplement):
很少用到标准化输入 不知道为什么会出这种问题
用了fflush以后会变成scanf无法用空白来决定输入是否停止
所以如果我把(1,2) (3,4)中间用空白来打
就没办法读了
如有不清 我会再补充 感谢大家m(_ _)m
作者: bibo9901 (function(){})()   2015-06-19 18:29:00
改成 scanf("%d ") 和 scanf("(%lf,%lf) ")然后 flush(stdin) 是 undefined behavior我意思是scanf 第一个参数,结尾加一个空白 @@
楼主: sr29 (owo)   2015-06-19 21:43:00
恩 我有加过了 第二个scanf也是一样 结果还是无法orz
作者: easyget (easyget)   2015-06-19 23:10:00
http://pastie.org/10248921从 16 行开始,有变更 如果大大有什么问题,再发信问我
作者: johnhmj (耗呆肥羊)   2015-06-20 00:50:00
作者: yvb   2015-06-20 16:27:00
改成空白放前面, 也就是 scanf(" (%lf,%lf)",... 这样呢?
作者: LPH66 (-6.2598534e+18f)   2015-06-20 17:14:00
问题在于大部份的 %xx 会先吃掉空白再读, 但非 % 字符不会所以 ( 就真的只吃 ( 不吃空白, 于是输入之间的空白就卡住而在格式字串里放空白则是一个空白吃全部连续的空白这样就把输入之间的空白给吃掉了另外要注意的是 %xx 会停在它看不懂的第一个字而且**不会先帮你吃掉空白**, 这对后读的读取会造成影响(以上我推文中的“空白”皆指 whitespace, 广义的空白字符)
楼主: sr29 (owo)   2015-06-20 17:47:00
了解了 感谢!
作者: firejox (Tangent)   2015-06-22 20:13:00
scanf("%*1[(]%lf%*1[,]%lf%*1[)]",..) ?
楼主: sr29 (owo)   2015-06-24 11:54:00
有试过了 楼上那个好像也可以!

Links booklink

Contact Us: admin [ a t ] ucptt.com