Operatoren



  • Hallihallo, 😃
    Kann mir jemand sagen, warum der folgenden Ausdruck der while-Schleife immer "false" ist:

    int x = 7;
    while(x++ == 8 || x == 7)
    {...}
    

    Normal wird doch mit "++" der Wert von x um 1 erhöht, oder?
    Was habe ich falsch gemacht? 😞



  • x++ gibt zuerst x zurück, und erhöht erst danach x um 1. dh in dem vergleich wäre x=7, und nicht 8.

    anders sähe es mit dem ausdruck ++x aus.

    witzig an der sache ist, dass x auf der anderen seite vom or schon 8 ist, und somit auchd er test x==7 fehlschlägt.



  • Zuerst wird die 1. Bedingung ausgewertet. Da du das Postinkrement benutzt, wird der Wert erst nach dem Vergleich um 1 erhöht. Der Vergleich ergibt also false und danach wird x auf 8 erhöht. Da immer noch nicht feststeht, ob der Gesamtausdruck true oder false ergibt, muss auch die 2. Bedingung geprüft werden, was natürlich auch false ergibt (da x ja jetzt 8 ist). Folglich ist die gesamte Bedingung falsch.



  • zocker001 schrieb:

    Hallihallo, 😃
    Kann mir jemand sagen, warum der folgenden Ausdruck der while-Schleife immer "false" ist:

    int x = 7;
    while(x++ == 8 || x == 7)
    {...}
    

    Normal wird doch mit "++" der Wert von x um 1 erhöht, oder?
    Was habe ich falsch gemacht? 😞

    Hoi,
    Du benutzt den Postfix Inkrement. Das heisst, x wird erst beim nächsten Zugriff auf x um 1 erhöht. Dieser momentane Zugriff im while-Kopf, hat also noch den Wert 7.
    Da beim " x == 7 " der nächste Zugriff erfolgt, ist x = 8 und somit "false".
    Ich würde Dir folgendes vorschlagen:

    int x = 7;
    if(x++ == 8 || x == 7)
    {...}
    

    greetz
    SLi



  • Vielen Dank für eure Hilfe, ihr seid echt klasse.
    Jetzt geht mir ein Licht auf... 💡 💡 💡


Anmelden zum Antworten