2017-02-19 3 views
0

Я уже писал здесь, но я никогда не мог получить помощь, в которой я нуждался. Я работаю над школьным проектом, и я не могу заставить свою программу работать правильно.Код игнорирует команду IF в C, проблемы с FOR

Программа должна предлагать пользователю ввести количество используемых галлонов и количество миль, рассчитанных на каждый из 3-х танков газа. Программа должна , а затем вычислить и отобразить мили за галлон, полученные для каждого резервуара. После завершения обработки для 3-х танков программа рассчитает общий пробег (общий галлон/всего миль) и отобразит дружеское сообщение «До свидания».

Проблема, с которой я сталкиваюсь, заключается в том, что я не могу ее отобразить для ОБЩЕЙ МИГРАЦИИ. он заканчивается после цикла 3 раза. Я знаю, что разные операторы цикла требуют условий для выполнения, но я не могу заставить цикл FOR работать правильно. Я очень расстраиваюсь, потому что знаю, что этого не должно быть так сложно.

Код

#include <stdio.h> 
int main(void) 
{ 
    int miles,i=3; 
    float gallons, mg, overall = 0, avg = 0; 
    while(i>0) 
    { 
     printf("Enter the gallons used: "); 
     scanf("%f", &gallons); 
     printf("Enter miles driven: "); 
     scanf("%d", &miles); 
     mg = miles/gallons; 
     printf("The miles/gallon for this tank was : %f\n", mg); 
     overall += miles; 
     avg += gallons;i--; 
    } 

    if(gallons == 0) 
    { 
     printf("\n\n The overall miles/gallon was: %f\n", overall/avg); 
     exit(0); 
    } 
    return 0; 
} 
+5

' если (галлоны == 0) '... emmm.why? –

+2

Можете ли вы разобраться в форматировании кода –

+2

Условие 'if (gallons == 0)' никогда не является истинным, поэтому утверждение печати никогда не произойдет. –

ответ

4

Если я прочитал ваш код правильно, то, что мешает общий пробег от печатаемого следующего окончательного if заявления:

if (gallons == 0) 

Если вы удалите его, то общий пробег необходимо принт. Используйте этот шаблон:

while (i > 0) 
{ 
    // your while loop here 
} 

printf("\n\n The overall miles/gallon was: %f\n", overall/avg); 
exit(0); 
+0

Большое вам спасибо. Мне очень тяжело обернуть мозг вокруг циклов в этом классе. Это сработало. Я подумал, что это что-то простое. но я работал над этим в течение недели и раздражался. –

+0

@MikeDahl Ради всего, может быть, вы могли бы прокомментировать, почему у вас есть 'if (gallons == 0)' там. Возможно, вы проверяли завершение цикла, или, может быть, вы хотели проверить деление на ноль? –

+1

У меня было это там, потому что я идиот, и я все еще пытаюсь понять все это. –

0

Добавление Tim Biegeleisen' сек ответ:

mg = miles/gallons; 

Что делать, если gallons равно 0? например 0 миль за 0 галлонов
Это приведет к исключению с плавающей запятой.

Простой if-else может решить эту проблему!

if(!gallons) 
    mg = 0; 
else 
    mg = miles/gallons; 
+0

Поскольку это будет расчет с плавающей запятой, это, вероятно, приведет к бесконечности в результате, а не к сбою. Любопытно, но в наши дни одним из немногих способов генерации FPE (исключение с плавающей запятой) является _integer_ деление на ноль. –

+0

@JonathanLeffler Спасибо! На моем терминале я выполнял целочисленное деление, которое разбило программу на делитель на '0'. Так что неправильное заявление с моей стороны. – rootkea

0

Это если (if (gallons == 0) {}) блок вышел из цикла. Во-первых, вам нужно переместить цикл if внутри цикла while. , и это условие должно быть для переменной i следующим, а не для галлонов.

if (i == 0) 
{ 
    printf("\n\n The overall miles/gallon was: %f\n", overall/avg); 
} 

В этом случае после 3 итерации, значение I будет 0, так что будет входить в блок, если и рассчитать и распечатать общие мили/галлон.

0

вы должны поставить if (gallons == 0) { /* print something that says gallons can't be 0 and skip the mg = miles/gallons to avoid a divide by zero ! */ }

Я не мог видеть цикл, чтобы дать какие-либо рекомендации по этому вопросу.

где расчет для средн = общий/средний

if (gallons == 0) { /* print something that says gallons can't be 0 
and skip the mg = miles/gallons to avoid a divide by zero ! */ 
} 
if (gallons == 0) { /* print something that says gallons can't be 0 
and skip the mg = miles/gallons to avoid a divide by zero ! */ 
} 
enter code here 

and then printing the avg ? `printf();` 

if (gallons == 0) { /* print something that says gallons can't be 0 
and skip the mg = miles/gallons to avoid a divide by zero ! */ 
} 

`

+2

Ваш ответ полностью не читается прямо сейчас, не могли бы вы его отредактировать или удалить? –

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