3 bedingungen bei einer do-while schleife



  • hi!

    ich habe folgendes problem:
    eine do-while schleife soll immer dann wiederholt werden, wenn eine eingabe nicht im bereich 2-20 liegt ODER ein zähler kleiner als 5 ist. das problem dabei ist die formulierung.

    man kann ja 2 bediungungen mit verknüpfungsoperatoren stellen, also hier zb (eingabe<2 || eingabe>20), um den zahlenbereich 2-20 einzugrenzen. die schleife soll aber auch dann beendet werden, wenn der zähler nichtmehr kleiner als 5 ist. ich würde das dann so formulieren:

    do
    {
    ...
    }
    while (eingabe<2 || eingabe>20)||(zähler<5);

    beim kompilieren, wird in dieser zeile aber dann ein fehler angezeit, warum??
    ist die formulierung so nicht möglich?



  • Du mußt um die Bedingungen herum komplett ein Klammerpaar packen:

    while ((eingabe<2 || eingabe>20)||(zähler<5));
    

    statt

    while (eingabe<2 || eingabe>20)||(zähler<5);
    


  • NES-Spieler: Quark.

    Hinter eingabe>20 ist ne schließende Klammer zuviel.



  • Michael E. schrieb:

    NES-Spieler: Quark.

    Hinter eingabe>20 ist ne schließende Klammer zuviel.

    nö, vor zähler<5 ist eine öffnende zuviel :p



  • Beides ^^



  • ahso+g+ alles klar danke! 😉

    ja die klammern um um die ersten beiden bedingungen hab ich eig mehr für mich gemacht, die beiden zusammen grenzen halt den bereich 2-20 ein. aber ich wusste net, dass man alle bedinungen zusammen überhaupt einklammern muss^^

    aber wenn ich jetzt sone bdg. hab
    ((xx&&xx)||(yy&&yy))
    dann sind die inneren klammern notwendig oder?!

    mfg



  • Nicht unbedingt. Zumindest nicht in dem Beispiel. Der &&-Operator wird immer vor dem ||-Operator ausgewertet. (So wie bei dem Grundsatz Punktrechnung geht vor Strichrechnung, ist es hier so: Und-Operator geht vor Oder-Operator.)



  • würd die klammmern trotzdem machen, da es dadurch eindeutiger wird, was gemeint ist. dass && vor || ausgewertet wird ist ein implementierungsdetail und basiert auf keinen mathematischen regeln wie beispielsweise "punkt- vor strichrrechnung"



  • thordk schrieb:

    würd die klammmern trotzdem machen, da es dadurch eindeutiger wird, was gemeint ist. dass && vor || ausgewertet wird ist ein implementierungsdetail und basiert auf keinen mathematischen regeln wie beispielsweise "punkt- vor strichrrechnung"

    Nicht auf mathematischen Regeln, aber auf der (im Standard festgelegten) Operator-Rangfolge.



  • CStoll schrieb:

    thordk schrieb:

    würd die klammmern trotzdem machen, da es dadurch eindeutiger wird, was gemeint ist. dass && vor || ausgewertet wird ist ein implementierungsdetail und basiert auf keinen mathematischen regeln wie beispielsweise "punkt- vor strichrrechnung"

    Nicht auf mathematischen Regeln, aber auf der (im Standard festgelegten) Operator-Rangfolge.

    klar, finds nur immer dann sinnvoll zu klammern, wenns für einen leser nicht sofort ersichtlich ist, welche reihenfolge gemeint ist, ohne die operatorreihenfolge zu kennen.
    bei 1+2*3 gehts ja noch, aber bei 12+2*3|1&7+1/42 hörts bei mir auf 😉



  • thordk schrieb:

    bei 1+2*3 gehts ja noch, aber bei 12+2*3|1&7+1/42 hörts bei mir auf 😉

    Warum, da kommt 11 raus. *scnr*


Anmelden zum Antworten