我正在尝试编写一个程序来计算出售汽车所带来的利润。我的输出没有输出正确的数字。我不认为我使用正确的格式说明符。我不断得到一个不应该得到的数字。
#include <stdio.h>
#include <stdlib.h>
int main()
{
char model;
double purchase;
double sell;
double profit;
printf("Car Profit Calculator\n");
printf("Enter Car Model\n");
scanf("%u",&model);
printf("Enter Purchase Price\n");
scanf("%d",&purchase);
printf("Enter Price Sold for\n");
scanf("%d",&sell);
profit = (double)sell / purchase;
printf("Profit%d\n", profit);
return 0;
}
答案 0 :(得分:1)
是的,你使用了错误的转换说明符。对于char
,您应该使用%c
,对于双倍,您必须使用%lf
。
从C11
标准,章节§7.21.6.2,fscanf()
函数定义,
.. [..] .. 除非
*
表示分配抑制,否则 转换结果放在由尚未收到转换结果的format参数后面的第一个参数指向的对象中。如果此对象没有适当的类型,或者无法在对象中表示转换结果,则行为未定义。
所以,你正面临undefined behavior。
在您的代码中,更改
scanf("%u",&model);
到
scanf("%c",&model);
和
scanf("%d",&purchase);
到
scanf("%lf",&purchase);
同样适用于sell
最后,
printf("Profit%d\n", profit);
到
printf("Profit %f\n", profit); //for printf, %f is enough for a double