2016-09-19 13 views
3

Bitte gehen Sie einfach auf mich, wie ich zu C komplett neu bin ++ und bin zur Zeit in einem Programmier intro Klasse :) tun, während Aussagen nicht korrekt kompilieren (Anfänger)

ich derzeit Probleme mit bin ein do bekommen \ while-Anweisung, um korrekt zu kompilieren. Mein Ziel ist es, das Folgende einzugeben, bis der Sentinel-Wert von -1 eingegeben wird, was den Prozess beenden und mir kumulative Summen meiner Werte geben würde.

Hier sind die Werte, die ich bin für jede Einheit zur Eingabe benötigen:

gallons used 
starting mileage 
ending mileage 
miles driven 
miles per gallon 

sobald der Sentinel-Wert eingegeben wird, sollte es in Kombination die folgenden für alle Unternehmen dann berechnen:

total gallons used 
total miles driven 
overall average miles per gallon 

Unten ist, was ich bisher habe, aber es endet nicht, wenn -1 eingegeben wird. Ich habe nicht die endgültigen Werte hinzugefügt, die noch zu verwenden sind, wenn -1 eingegeben wird, da ich mir nicht sicher bin, wie es weitergehen soll und versuche, Teil 1 erst richtig zu machen. Unten ist mein Code (bitte die Kommentare entschuldigen):

int main(void) 
{ 

    StartUp(); //indicates beginning of code 

    double startmileage{ 0 };    //indicates starting mileage, initialized at the value of 0 
    double endmileage{ 0 };    //indicates ending mileage, initialized at the value of 0 
    double milesdriven{ 0 };    //indicates total miles driven, initialized at the value of 0 
    double gallonsused{ 0 };    //indicates total gallons used, initialized at the value of 0 
    long double milespergallon{ 0 };  //indicates total miles per gallon, initialized at the value of 0 

    do 
    { 
     cout << "enter the gallons used: ";        //prompts user to enter total number of gallons used for trip 
     cin >> gallonsused;             //user enters data 

     cout << "enter starting mileage: ";        //prompts user to enter start mileage for trip 
     cin >> startmileage;            //user enters data 

     cout << "enter ending mileage: ";         //prompts user to enter end mileage for trip 
     cin >> endmileage;             //user enters data 

     milesdriven = startmileage + endmileage;       //calculates total miles driven 

     cout << "Miles Driven: " << milesdriven << endl;     //outputs total miles driven to screen 

     milespergallon = milesdriven/gallonsused;       //calculates total miles per gallon 

     cout << "Miles Per Gallon: " << milespergallon << endl;   //outputs miles per gallon to screen 
    } 

    while (gallonsused != -1); 
WrapUp(); //indicates end of code 

    return Success; 

} 

hier, was geschieht:

enter the gallons used: 12.8 
enter starting mileage: 0 
enter ending mileage: 277 
Miles Driven: 277 
Miles Per Gallon: 21.6406 
enter the gallons used: -1 
enter starting mileage: 

wie Sie sehen können, ist es Loops, aber hört nicht auf, wenn der Sentinel-Wert

eingegeben

Jede Hilfe wäre sehr willkommen!

Vielen Dank!

+0

Debuggers sind deine Freunde sie verwenden. Sie können den Code einfach mit einem Debugger durchgehen, um zu ermitteln, wie die Anweisung 'do-while' funktioniert. Keine Notwendigkeit, hier zu posten. –

+0

Versuchen Sie, den Wert dieser 'double' -Variablen nach der Benutzereingabe auszugeben. –

+0

@ Clarky7782 Was ist die *** sehr nächste Zeile *** Code nach 'cin >> gallonsused;'? Sie missverstehen, wie eine Schleife funktioniert. (BTW Sie sollten auch Ihr Verständnis des Unterschieds zwischen dem Kompilieren und dem Ausführen eines Programms überprüfen.) –

Antwort

3

Sie testen gallonsused != -1 nicht bis zum Ende der Schleife, nachdem der Benutzer auf alle anderen Eingabeaufforderungen geantwortet hat und berechnet die Meilenzahl.

Anstatt do-while() zu verwenden, sofort gallonsused testen, nachdem der Benutzer es eingegeben hat, und aus der Schleife ausbrechen.

Sie benötigen auch Variablen für die Gesamtmeilen gefahren und insgesamt Gallonen verwendet. Nach jeder Eingabe fügen Sie die Werte für diese Reise zu den Summen hinzu und verwenden sie in den Gesamtsummen am Ende.

+0

Ich habe das ausprobiert und es endet unabhängig davon, ob es -1 oder ein positiver Wert ist. Ich versuche es zu bekommen, um alle Informationen einzugeben und dann zu einem sekundären, tertiären usw. Wert zu gehen, bis -1 eingegeben wird, was dann die kumulativen Summen macht: Hier ist was ich hinzugefügt habe ... – Clarky7782

+0

Es wäre eine gute Idee, auch die Schleife auf Eingabefehler zu diesem Zeitpunkt zu verlassen –

+0

@ Clarky7782 Es sollte funktionieren, wenn Sie kopiert, was ich geschrieben habe. Stellen Sie sicher, dass Sie '=' anstelle von '==' nicht eingegeben haben, das ist ein häufiger Fehler. – Barmar

0

Der Körper der Schleife (zwischen geschweiften Klammern) wird wie eine einzelne Einheit behandelt und von der Do-While-Kontrolle wiederholt. Versuchen Sie, eine if-Anweisung zu setzen, nachdem Sie die Gallonen, die für die Überprüfung von -1 verwendet werden, cin verwenden, verwenden Sie eine Pause, um die Schleife zu verlassen. Experimentieren mit dem sollte helfen.

0

while Ausdrücke, wie die Bedingung in einer for Schleife, werden an ihrer Position im Code ausgewertet, sie sind nicht überwachend.

#include <iostream> 

int main() { 
    int i = 0; 
    do { 
     std::cout << i << " "; 
     i += 2; 
     std::cout << i << ' '; 
     i -= 1; 
     std::cout << i << ' '; 
    } while (i != 2); 
} 

Ausgänge:

0 2 1 1 3 2 

Live-Demo: http://ideone.com/7JWLp7

Verwandte Themen