我是C的新手,我在09.3f格式中添加和打印一些双打时遇到问题。这是我的代码:
#include <stdio.h>
int main(int argc, char **argv)
{
double d, m, c;
scanf("%1f", &d);
scanf("%1f", &m);
c = d + m;
printf("%09.3f\n", c);
}
我输了两次scanf
但我只能输入一个数字,为什么呢?
我从printf得到的是00000.000
示例:d = 5,125,m = 1.256,然后我希望C为:00006.381
答案 0 :(得分:1)
代码在1
中使用scanf("%1f", &d);
的宽度限制。该数字将用户输入限制为1个非空白字符,然后尝试将结果保存在float
中。结果没有定义。
请务必启用所有警告。许多编译器会警告double d; scanf("%1f", &d);
不匹配。
要将输入保存到double
,请使用l
。 @Alter Mann请务必检查结果。
// ell, not one
// v
if (scanf("%lf", &d) != 1) puts("Number was not entered.");
答案 1 :(得分:0)
永远不要使用scanf
;它是broken-as-specified。
使用getline
阅读整行(如果您没有getline
,fgets
会这样做),然后strtod
将其解析为数字。 (在这种情况下,只使用strtod
可以完成整个作业,但您可能会发现编写首先使用strsep
分隔行的代码更容易。如果您不这样做;有strsep
,strtok
会做。)
完成这些更改后,您的程序就可以正常运行。
答案 2 :(得分:-2)
此处可能是使用Scanf的输入缓冲区问题。因此,您可以在space
中添加scanf
。等,
scanf("%lf", &d);
scanf(" %lf", &m);
另外,请使用%lf
中的scanf
代替%1f
。