scanf不读取双倍

时间:2016-03-31 15:13:48

标签: c

我在c。

中遇到了关于减号操作的问题
printf("\nPlease enter your payment:\n", userpayment);
scanf("%.2f", &userpayment);

customerchange = userpayment - totalfinal;
printf("The amount of change is %.2f\n", customerchange);

我将userpaymenttotalfinal声明为double

每当我输入价格时,例如; userpayment = 2000totalfinal为1500,输出将始终为1500。 解决方案是什么?

这是输出:

输入物品价格: 500 输入物料数量: 3 付款总额为:RM1500.00 这是最后一项吗? ÿ 已向客户提供Rm50现金回赠。 现金回赠前的总付款额为:1500 现金回赠后的总付款额为1450

请输入您的付款: 5000 您的更改是RM-14500.00

4 个答案:

答案 0 :(得分:5)

如果“userpayment”被定义为double,则更改

scanf("%.2f", &userpayment);

scanf("%lf", &userpayment);

或者将变量更改为浮点数。

就目前而言,你正在将浮动扫描到双重记忆中,导致不可预测的行为。

答案 1 :(得分:2)

scanf中的格式说明符不正确。阅读文档。

http://www.cplusplus.com/reference/cstdio/scanf/

您还应检查scanf的返回值,以确保它能够解析您希望解析的内容。

另外,如果您已经阅读了编译器警告,那么您可以省去问这个问题的麻烦。

答案 2 :(得分:1)

你混淆了printf的格式,它很相似但不一样,试着将%.2f替换为%lf

答案 3 :(得分:0)

由于您将变量定义为double,因此应使用:

scanf("%lf", &userpayment);

f表示浮点值,lf(long float)表示双精度。