2017-02-19 4 views
0

Ich hatte hier zuvor gepostet, aber ich war nie in der Lage, die Hilfe zu bekommen, die ich brauchte. Ich arbeite an einem Schulprojekt und ich kann mein Programm nicht richtig funktionieren lassen.Code ignoriert IF-Befehl in C, Probleme mit FOR

Das Programm sollte den Benutzer auffordern, die Anzahl der verwendeten Gallonen einzugeben, und die Anzahl der Meilen für jeden der 3 Tanks von Gas gefahren. Das Programm sollte dann berechnen und die Meilen pro Gallone anzeigen, die für jeden Tank erhalten werden. Sobald die Verarbeitung für die 3 Tanks abgeschlossen ist, berechnet das Programm die Gesamtmeilenzahl von (Gesamtgallonen/Gesamtmeilen) und zeigt eine freundliche "Auf Wiedersehen" -Nachricht an.

Das Problem, das ich habe, ist, dass ich es nicht zu OVERALL Millage anzeigen kann. Es endet nach dreimaligem Looping. Ich weiß, dass verschiedene Schleifenanweisungen Bedingungen erfüllen müssen, aber ich kann die FOR-Schleife nicht richtig funktionieren lassen. Ich werde wirklich frustriert, weil ich weiß, dass das nicht so schwer sein sollte.

-Code

#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

' if (Gallonen == 0) '... emmm.why? –

+2

Können Sie die Formatierung des Codes sortieren –

+2

Die Bedingung 'if (Gallonen == 0)' ist nie wahr, daher diese Druckanweisung nie passiert. –

Antwort

4

Wenn ich Ihren Code richtig gelesen, was dann von der Gesamtlaufleistung verhindert gedruckt wird, ist die folgende endgültige if Aussage:

if (gallons == 0) 

Wenn Sie es entfernen, dann die Gesamtkilometer sollte gedruckt werden. Verwenden Sie dieses Muster:

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

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

Vielen Dank. Mir fällt es wirklich schwer, das Gehirn um Schleifen in dieser Klasse zu wickeln. Das hat funktioniert. Ich dachte, es wäre etwas Einfaches. Aber ich arbeite seit einer Woche daran und wurde irritiert. –

+0

@MikeDahl Um Himmels willen, vielleicht könntest du sagen, warum du 'if (Gallonen == 0)' da drin hast. Vielleicht haben Sie überprüft, ob die Schleife abgeschlossen ist, oder wollten Sie vielleicht nach einer Division durch Null suchen? –

+1

Ich hatte es da drin, weil ich ein Idiot bin, und ich versuche immer noch alles zu verstehen. –

0

Hinzufügen zu Tim Biegeleisen' s Antwort:

mg = miles/gallons; 

Was passiert, wenn gallons gleich zu 0? z.B. 0 Meilen für 0 Gallonen
Dies wird zu Gleitkommaausnahme führen.

Ein einfaches if-else kann dieses Problem lösen!

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

Da es sich um eine Gleitkommaberechnung handelt, gibt es wahrscheinlich eine Unendlichkeit als Ergebnis, keinen Absturz. Es ist merkwürdig, aber heutzutage ist eine der wenigen Möglichkeiten, eine FPE (Gleitkommaausnahme) zu erzeugen, _integer_ division by zero. –

+0

@ JonathanLeffler Danke! An meinem Terminal führte ich eine Integer-Division durch, die das Programm abstürzte, weil der Divisor "0" war. Also die falsche Aussage meinerseits. – rootkea

0

Dieser If (if (gallons == 0) {}) Block ist außerhalb der While-Schleife. Zuerst müssen Sie die if-Schleife innerhalb der while-Schleife verschieben. und dies sollte Bedingung für Variable i wie folgt sein und nicht für Gallonen.

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

In diesem Fall nach 3 Iteration Wert von i wird 0, so wird es in den Block, wenn eingeben und berechnet und die Gesamt Meilen/Gallone drucken.

0

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

habe ich das für nicht-Schleife sehen konnte, auf dass jede Beratung zu geben.

wo ist die Berechnung für avg = Gesamt/avg

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

Ihre Antwort ist momentan völlig unlesbar, könnten Sie sie bitte bearbeiten oder löschen? –