Ausgabe bei einer do-while Schleife



  • Hallo,

    ich bin noch ein C++ Anfänger und versuche gerade, die do-while-Schleife zu verstehen.
    Leider verstehe ich bei folgendem Programmcode die Ausgabe nicht:

    int s=0, t=0;
    do
    {
    if (s>8) break;
    s+=2;
    if (s<6) continue;
    t+=3;
    }while (s);
    cout << t << endl;
    

    Ich weiß, dass für t 9 herauskommt, nur leider kann ich das nicht so recht nachvollziehen.

    Meine Überlegung war nämlich folgende:

    Sobald s größer als 8 ist, wird die Schleife unterbrochen und t wird dann nicht mehr mit 3 weiter addiert.

    Da beide bei 0 starten, kam ich darauf, dass bei s=2 t=3 ist usw.
    Die Schleife würde dann unterbrochen werden, wenn s größer als 8 ist, also in dem Fall 10, nur wäre dann t ja schon gleich 15, weil insgesamt 5 Additionen stattgefunden haben.

    Kann mir jemand helfen?



  • Hallo,

    ersteinmal: falsches Unterforum -> hier ist C++/CLI (aber ein Moderator wird das sicherlich verschieben).

    Weißt du denn, was die Zeile 6 genau macht?

    Hast du denn einen Debugger (sollte bei einer IDE automatisch da sein), mit dem du Schritt für Schritt dadurch gehen kannst?
    Ansonsten einfach mal eine Ausgabe vor Zeile 4 einbauen:

    cout << "s:" << s << endl;
    cout << "t:" << t << endl;
    


  • Leider habe ich keinen automatischen Debugger. Ich habe mir zum Verständnis auch s ausgeben lassen, aber ich verstehe die Aufgabe immer noch nicht.

    Ich kann ja mal meinen Gedankengang schildern:

    Erst, wenn s größer als 8 ist, wird der Vorgang abgebrochen.
    Da aber s zuerst 0 ist, wird es zunächst um 2 erhöht. Da es dann immer noch kleiner als 6 ist, geht der Vorgang weiter (continue) und t wird von 0 auf 3 erhöht.

    Dann wird s wieder um 2 erhöht, weil es kleiner als 8 ist, s ist also nun 4 und damit noch kleiner als 6, weshalb t nun um 3 erhöht werden darf.

    Dann wird s auf 6 erhöht, weil es immer noch kleiner als 8 ist, da aber s nun schon 6 ist, dürfte doch t nicht mehr um 3 addiert werden, da die if-Bedingung (s<6) nicht mehr erfüllt ist.

    Kann mir da jemand helfen?



  • Du hast continue nicht verstanden.



  • Kann mir das jemand noch etwas genauer erklären.
    Das wäre sehr nett.



  • continue überspringt den restlichen Code der Schleife und führt direkt wieder die Schleifenbedingung aus.
    Den Code kann man auch so schreiben:

    int s=0, t=0;
    do
    {
      if (s>8) break;
      s+=2;
      if (s>=6) t+=3;
    }while (s);
    cout << t << endl;
    

    Verstehst du es jetzt?


Anmelden zum Antworten