Frage über die while Schleife



  • Hallo Leute,

    ich habe den folgenden Code,

    #include <iostream>
    using namespace std;
    int main() {
    int n {7};
    while (n-- > 0)
    cout << --n;
    cout << n;
    return 0;
    }
    

    Die Ausgabe ist : 531-1-2

    ich kann aber nicht begreifen wieso ich zum Schluss -2 kriege? Hat jemand eine Idee?



  • Zunächst mal ist es hilfreich, den Code einzurücken:

    int main() {
        int n {7};
        while (n-- > 0)
            cout << --n;
        cout << n;
        return 0;
    }
    

    Vereinfache den Code doch mal und starte gleich mit n = -1 (7,5,3,1 scheinen dir ja klar zu sein). Denk doch mal nach und beschreibe, was nun bei folgender Zeile passiert:

    while (n-- > 0)
    

    PS: ich würde am Ende noch ein '\n' ausgeben.



  • wob schrieb:

    Zunächst mal ist es hilfreich, den Code einzurücken:

    int main() {
        int n {7};
        while (n-- > 0)
            cout << --n;
        cout << n;
        return 0;
    }
    

    Vereinfache den Code doch mal und starte gleich mit n = -1 (7,5,3,1 scheinen dir ja klar zu sein). Denk doch mal nach und beschreibe, was nun bei folgender Zeile passiert:

    while (n-- > 0)
    

    PS: ich würde am Ende noch ein '\n' ausgeben.

    Vielen Dank für deine Antwort! Wenn ich n = -1 zuweise kriege ich nur -2 als Ausgabe. Ich glaube diese Zeile bzw Anweisung

    while (n-- > 0)
    

    wird einmal kompiliert da wird n = -2 und weil n kleiner als 0 ist wird diese Zeile

    cout << --n;
    

    nicht berücksichtigt.
    Der Compiler wird es überspringen und wird -2 ausgeben.

    Habe ich es richtig verstanden?



  • Also Postfix heißt ja "mach die Operation aber liefer mir den alten Wert zurück".
    Also steht im ersten Durchgang:

    int n = -1;
    while (-1 > 0) // false = Schleife ist schon zu Ende... die Schleife wird gar nie durchlaufen.
    

    Und nach der Schleife gibst du ja einfach nur n aus. Und n wurde im Schleifenkopf einmal dekrementiert, ist also nun -2 :

    cout << n; // -2
    


  • out schrieb:

    Also Postfix heißt ja "mach die Operation aber liefer mir den alten Wert zurück".
    Also steht im ersten Durchgang:

    int n = -1;
    while (-1 > 0) // false = Schleife ist schon zu Ende... die Schleife wird gar nie durchlaufen.
    

    Und nach der Schleife gibst du ja einfach nur n aus. Und n wurde im Schleifenkopf einmal dekrementiert, ist also nun -2 :

    cout << n; // -2
    

    Hab mir auch so gedacht, vielen Dank!


Anmelden zum Antworten