为什么我的乘法运算返回零?

时间:2013-12-19 22:57:50

标签: c unix

我在c中写了我的第一个程序,只是为了练习。但是,我不知道为什么它不起作用?以下代码段中socks * price;的结果为零。我在这里缺少什么?

#include<stdio.h>

main()
{
      int socks;
      float price, total;

      printf("How many socks >> ");
      scanf(" %d", &socks);

      printf("What is the price for each pair ?");
      scanf(" %.3f", &price);

      total = socks * price;
      printf("\n\nTotal: %.3f", total);

return 0;
}

这是正常的乘法;我首先想知道用户为socks支付了多少4,为单对提供了price,让我们说每100.000 sock(我知道,这对袜子来说很重要,但这仅仅是例如)。

Total是一个float号码,因此4 * 100.000 =应该total价格= 400.000,但我得0

5 个答案:

答案 0 :(得分:2)

问题是scanf的使用不正确。我们不使用scanf格式化“%。3f”。相反,您可以在打印输出时使用它

      printf("What is the price for each pair ?");
      scanf("%f", &price);

      total = socks * price;
      printf("\n\nTotal: %.3f", total);

答案 1 :(得分:1)

更改如下

scanf(" %f", &price);

答案 2 :(得分:1)

虽然scanf(" %.3f", &price);的格式无效,但较大的问题未使用scanf()返回值

if (scanf("%f", &price) != 1) {
  handle_bad_put();
}

如果不测试scanf()的结果,则不知道是否设置了price。不使用正确的格式仍然可以欺骗scanf()结果,但问题有scanf()倾向,测试结果是防御性编码,应该被认为是强制性的。

答案 3 :(得分:0)

你的main函数返回一个int因此

int main() 
{
   ...
}

当你得到价格的输入时,它应该是

scanf("%f", &price);

答案 4 :(得分:0)

问题是scanf的格式,如在scanf中,它应该是以下内容:      %[*] [宽度] [长度]符 所以你不能使用像printf那样的精确字段。

供您参考的资源:http://www.cplusplus.com/reference/cstdio/scanf/