我在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
。
答案 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那样的精确字段。