程序无效

时间:2015-05-13 16:40:17

标签: c scanf format-specifiers

我正在尝试编写一个程序来计算出售汽车所带来的利润。我的输出没有输出正确的数字。我不认为我使用正确的格式说明符。我不断得到一个不应该得到的数字。

        #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;
        }

1 个答案:

答案 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