While Schleife mit Dekrement verstehen?

...komplette Frage anzeigen while - (Computer, PC, Informatik)

3 Antworten

In C++ ist eine Bedingung auch dann wahr, wenn sie eine positive Zahl darstellt, also ergibt 10 als bool gespeichert den Wert true.

Es wird also in dem Sinne geprüft, ob n größer als Null ist und dann wird n dekrementiert.

while(n--){...}

Hier ist das Dekrement hinter der Variable, also wird erst der Wert zurückgegeben und dann wird die Variable dekrementiert.

Das ist aber sehr unschöner Stil, hier würde man professionell eher eine for-Schleife verwenden oder die Variable am Ende der Schleife dekrementieren und in der Bedingung überprüfen, ob n > 0 ist.

while(n > 0){
...
n--;
}

oder

for(; n > 0; n--){
...
}

Beides ist möglich, aber ein while(n--) ist wirklich unschön - zwar kurz, aber nicht sehr verständlich.

LG Willibergi

Antwort bewerten Vielen Dank für Deine Bewertung
Kommentar von RealAutism
05.03.2017, 20:31

ok alles klar danke für die Tipps :) das letzte n = n-1; der äquivalenten while schleife hat dann in diesem Fall gar keine Funktion mehr richtig ?

0
Kommentar von PWolff
05.03.2017, 20:58

Mit C hatte ich schon seit zwei Ewigkeiten nicht mehr zu tun (in der Informationstheorie gelten 10 Jahre als eine Ewigkeit), aber while(i--) (und noch mehr while(t=s[i++])) ist mir noch sehr geläufig. (Allerdings hatte so was noch sehr viel Sinn, als 1 KiB RAM noch 10 DM kostete.)

3

In C/C++ und anderen Sprachen entsprechen Zahlen != 0 dem booleschen TRUE.

Eine while Schleife läuft solange, wie ihre Bedingung TRUE ist. Wenn du jetzt einen Integer hast, der ungleich 0 ist, dann gilt das als TRUE.

In jedem Schleifendurchlauf wird durch das decrement n immer kleiner. Irgendwann erreicht es 0, was als FALSE interpretiert wird. Dann endet die Schleife.

Ich ich persönlich halte diese Art jedoch für einen schlechten Stil. Ich bin ein großer Freund von klaren booleschen Vergleichen, da dann auf jeden Fall klar ist was geschieht.

Antwort bewerten Vielen Dank für Deine Bewertung
Kommentar von RealAutism
05.03.2017, 20:28

achso ok alles klar diese info fehlte mir, aber dieses letzte n= n-1; der äquivalenten schleife hat dann in diesem fall gar keine funktion mehr richtig? also auf das was ausgegeben wird meine ich

0

Die Schleife wird so lange durchlaufen bis n ungleich Null ist.

Antwort bewerten Vielen Dank für Deine Bewertung
Kommentar von RealAutism
05.03.2017, 20:24

du meinst bis n gleich Null ist? ungleich null macht ja keinen sinn davor wird ja die eingabe 1-8 erzwungen ?

1
Kommentar von ohwehohach
05.03.2017, 20:26

Nein. Die Schleife wird solange durchlaufen, bis noch gleich 0 ist.

0
Kommentar von softie1962
05.03.2017, 20:27

ersetze "bis" durch "wie"

1

Was möchtest Du wissen?