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*