2016-02-05 19 views
-3

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

int main(void) { 
    int distance, time, speed, meters, mts_per_mile, sec_per_mile, mts, mps; 
    csis = fopen("csis.txt", "w"); 

    distance = 425.5; 
    time = 7.5; 
    speed = distance/time; 
    mts_per_mile = 1600; 
    sec_per_mile = 3600; 
    mts = distance * mts_per_mile; 
    mps = mts/sec_per_mile; 


    printf("The car going %d miles in %d hours is going at a speed of %d mph.\n", distance, time, speed); 
    fprintf("The car going %d miles in %d hours is going at a speed of %d mph.\n", distance, time, speed); 
    printf("The car has traveled %d meters total, at a rate of %d meters per second.", mts, mps); 
    fprintf("The car has traveled %d meters total, at a rate of %d meters per second.", mts, mps); 
    fclose(csis); 
    return 0; 
} 
+5

Ну, вместо использования 'int' для переменных используйте' double' или 'float'. Это решит вашу проблему. – ameyCU

+0

'int' означает [целое число] (https://simple.wikipedia.org/wiki/Integer). –

+5

Вы неправильно вызываете 'fprintf' –

ответ

1

Если вы хотите использовать 2 десятичных знака, вам нужно использовать двойные или плавающие переменные. Также вы забыли указать тип переменной csis (что равно FILE*). fprintf() принимает в качестве первого аргумента дескриптор FILE*, который вы пропустили. Чтобы использовать два десятичных знака в выводе, просто используйте %.02f в printf()/fprint().

Смотрите также ссылку на printf() и fprintf()

#include <cstdlib> 
#include <cstdio> 

int main(void) { 
    double distance, time, speed, mts_per_mile, sec_per_mile, mts, mps; 
    FILE* csis = fopen("csis.txt", "w"); 

    distance = 425.5; 
    time = 7.5; 
    speed = distance/time; 
    mts_per_mile = 1600; 
    sec_per_mile = 3600; 
    mts = distance * mts_per_mile; 
    mps = mts/sec_per_mile; 

    printf("The car going %.02f miles in %.02f hours is going at a speed of %.02f mph.\n", distance, time, speed); 
    fprintf(csis, "The car going %.02f miles in %.02f hours is going at a speed of %.02f mph.\n", distance, time, speed); 
    printf("The car has traveled %.02f meters total, at a rate of %.02f meters per second.", mts, mps); 
    fprintf(csis, "The car has traveled %.02f meters total, at a rate of %.02f meters per second.", mts, mps); 
    fclose(csis); 
    return 0; 
} 

выход будет:

Автомобиль собирается 425.50 миль в 7.50 часов идет со скоростью 56,73 миль в час. Автомобиль преодолел 680800,00 метра в общей сложности, в размере 189,11 метров в секунду.

+0

Это было бы более условно для использования '% .2f', нуль не имеет никакой цели. –

1

Все ваши переменные имеют тип int, который сохраняет только интегральные значения.

425.5 будет преобразован в int как 425 (округление происходит к нулю). Аналогично, 7.5 будет преобразован как 7.

Дайвинг два int с (425 по 7) также будет производить интегральное значение, с округлением к нулю, следовательно, производить 60.

Если ваш компилятор имеет int тип, который не может поддерживать значения более чем 32767 (стандарт C не требует фактически не более того), то расчет 60*1600*3600 переполнится. Результат этого называется неопределенным поведением, и одним из возможных симптомов является «ошибка».

Если вы хотите получить нецелые реальные значения, введите переменные типа float или double. И измените спецификаторы формата, чтобы вывести их из %d в %f. Для вывода в 2 десятичных знака используйте формат %.02f.

+0

Было бы более условно использовать'% .2f', нуль не имеет никакой цели. –

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