2 qq 27625787 qq_27625787 于 2016.03.01 14:48 提问

c++ scanf多个负数输入问题

double a,b,c,d;
scanf("%lf,%lf,%lf,%lf",&a,&b,&c,&d);

这里,假如输入数是-1.2,2.34,-3,-4.56
那么除了第一个数a外,后面三个都不能得到正确的值,这是为什么?
正数和整数就可以。
而要想输入多个负数,scanf中间就要用“ ”空格分开,不能用“,”逗号,假如格式化必须要使用逗号怎么办(在某种格式化输入中需要使用逗号),为此我折腾了半天?

2个回答

qq_27564553
qq_27564553   2016.03.01 15:17

scanf("%lf,%lf,%lf,%lf",&a,&b,&c,&d);中逗号去掉

 scanf("%lf%lf%lf%lf",&a,&b,&c,&d);

出现这个问题是因为后面因为给double传了‘,’,所以当无效输入处理了,使用函数的时候小心点

qq_27625787
qq_27625787 输入格式就是要用逗号分开,我知道不用逗号是没问题的
一年多之前 回复
qq_27564553
qq_27564553 昨天下面的还没有看清呢,你想要的那种方式scanf应该是实现不了的,因为scanf的实际作用先占位几个位置,然后输入的第一个放到一个中,以此类推。你输一个空一个也可以使用,因为到遇到空白字符(空格,tab,newline等等)时自动就把前面读取的当作一个数,而这个函数没有判断你的符号。你可以看看这个函数的文档,看看有没有你想要的例子
接近 2 年之前 回复
jianwen0529
jianwen0529   Rxr 2016.03.01 17:19

在VS2013下没有出现你所说的问题
这不应该是这个函数的Bug,而是你输入的数据或者编译器的问题了

你实在不行可以先取得整行的输入
再把这个字符串中的逗号替换为其他字符如空格
再用sscanf(strIn, "%lf %lf %lf %lf", &a, &b, &c, &d")

建议你多测试下,如果是编译器的Bug最好就换个编译器

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!