添加2个双打并打印出来

时间:2016-09-07 12:44:41

标签: c

我是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

3 个答案:

答案 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阅读整行(如果您没有getlinefgets会这样做),然后strtod将其解析为数字。 (在这种情况下,只使用strtod可以完成整个作业,但您可能会发现编写首先使用strsep分隔行的代码更容易。如果您不这样做;有strsepstrtok会做。)

完成这些更改后,您的程序就可以正常运行。

答案 2 :(得分:-2)

此处可能是使用Scanf的输入缓冲区问题。因此,您可以在space中添加scanf。等,

 scanf("%lf", &d);

 scanf(" %lf", &m);

另外,请使用%lf中的scanf代替%1f