2015-05-13 2 views
-1

Я пытаюсь написать программу для расчета прибыли от продажи автомобиля. Мой результат не выходит с правильным номером. Я не думаю, что использую правильный спецификатор формата. Я продолжаю получать число, которое не то, что я должен получать.Программа не работает

 #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

не приходило в голову вам 'спецификаторов формата Printf' Google? –

ответ

1

Да, вы используете неправильный спецификатор преобразования. для char, вы должны использовать %c, для двойника вы должны использовать %lf.

От C11 стандарта, глава §7.21.6.2, fscanf() определения функции,

.. [..] .. Если подавление назначения не было обозначено *, то результата конверсии помещенный в объект, на который указывает первый аргумент, следующий за аргументом формата, который еще не получил результат преобразования. Если этот объект не имеет соответствующего типа или если результат преобразования не может быть представлен в объекте, поведение не определено.

Итак, вы столкнулись с 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 
+0

Я продолжаю получать 0 за свою прибыль. – werty345353534

+0

Также как мне получить название письма для модели, а не только номер? – werty345353534

+0

@ werty345353534 Да, результатом UB может быть что угодно. –

Смежные вопросы