Unterschied zwischen “while”-Schleife und “do while”-Schleife
Lesezeit: 4 Minuten
Narayanpatra
Was ist der Unterschied zwischen While-Schleife und Do-While-Schleife? Früher dachte ich, beide seien völlig gleich. Dann stieß ich auf folgenden Code:
do {
printf("Word length... ");
scanf("%d", &wdlen);
} while(wdlen<2);
Dieser Code funktioniert einwandfrei. Es druckt Wortlänge und tascans die Eingabe. Aber als ich es geändert habe
Es gibt einen leeren Bildschirm. Es funktioniert nicht. Es gibt also einen funktionalen Unterschied zwischen beiden Schleifen. Kann es jemand erklären?
Gibt es einen anderen Unterschied zwischen diesen beiden?
While-Schleife überprüft die Bedingung zunächst und führt sie dann aus. Aber do-while führt den Rumpf mindestens einmal aus, selbst wenn die Bedingung falsch ist.
– Raghu Srikanth Reddy
3. Januar 2013 um 19:22 Uhr
Beide sind gleichermaßen kaputt, weil keiner von ihnen den Rückgabewert von überprüft scanf().
– Nisse Engström
4. Mai 2015 um 19:41 Uhr
Wasserstoff
Das tun, während Schleife führt den Inhalt der Schleife einmal aus, bevor sie die Bedingung von While überprüft.
Während a während Schleife überprüft zuerst die Bedingung, bevor der Inhalt ausgeführt wird.
In diesem Fall warten Sie mit scanf() auf Benutzereingaben, die im niemals ausgeführt werden während Schleife, da wdlen nicht initialisiert ist und möglicherweise nur einen Müllwert enthält, der größer als 2 sein kann.
“wdlen (beginnt vermutlich bei 0) und wird nie < 2" - damals im Matheunterricht wurde mir beigebracht, dass 0 < 2 ist ;-)
– Peter Török
2. September 2010 um 9:32 Uhr
0 < 2 == falsch? Bist du dir sicher?
– Jost
2. September 2010 um 9:33 Uhr
Danke Kumpel. Ich habe verstanden. Irgendwelche anderen Unterschiede in diesen beiden?
– Narayanpatra
2. September 2010 um 9:35 Uhr
Wenn ich ein Compiler wäre und wdlen nicht initialisiert würde, würde ich den ganzen Block überspringen, denn wenn er undefiniert ist, könnte er genauso gut immer > 2 sein.
– AndreKR
7. Oktober 2012 um 14:22 Uhr
Während : Ihre Bedingung steht am Anfang des Schleifenblocks und ermöglicht um niemals in die Schleife einzutreten.
Während tun : Ihre Bedingung steht am Ende des Schleifenblocks und macht obligatorisch mindestens einmal in die Schleife einzusteigen.
tnx für eine gute Wiedergabe. Es gibt nur einen Unterschied?? Gibt es einen anderen Unterschied??
– AminM
20. Juli 2012 um 13:41 Uhr
@AminM Letzteres erfordert zwei zusätzliche Zeichen zum Eintippen.
– Benutzer4734394
6. Juli 2017 um 11:21 Uhr
While wird manchmal fast wie ein if verwendet, denn wenn die Bedingung nicht wahr ist, wird die Schleife nie betreten, und innerhalb der Schleife befindet sich Code, der damit umgeht, dass die Bedingung wahr ist, bis sie es nicht mehr ist.
– Alan Corey
29. Oktober 2018 um 20:28 Uhr
Es gibt andere Programmiersprachen, wo while ... do wird auch geschrieben als while ... do aber do ... while wird geschrieben als repeat ... until. Dies entspricht eher der allgemeinen englischen Sprache.
– Dominik
12. Dezember 2018 um 13:06 Uhr
Mahmud
do {
printf("Word length... ");
scanf("%d", &wdlen);
} while(wdlen<2);
EIN do-while loop garantiert die mindestens einmalige Ausführung der Schleife, da sie die Schleifenbedingung NACH dem Schleifendurchlauf überprüft. Daher wird die Zeichenfolge ausgegeben und scanf aufgerufen, wodurch die wdlen-Variable aktualisiert wird.
Wie für die while Schleife, wertet sie die Schleifenbedingung aus, BEVOR der Schleifenrumpf ausgeführt wird. wdlen beginnt wahrscheinlich mit mehr als 2 in Ihrem Code, weshalb Sie den Schleifenkörper nie erreichen.
“beginnt wahrscheinlich mit weniger als 2” … while(wdlen<2)… Hoppla?
– Stefan
2. September 2010 um 9:50 Uhr
tun, während Sie sich in einer Ausgangsregelschleife befinden. while ist eine Eingangsregelschleife.
Unnati Schah
Während:
Eingangsregelkreis
Bedingung wird vor Ausführung der Schleife überprüft
Schleife niemals ausführen, wenn Bedingung falsch ist
Am Ende der while-Anweisung steht kein Semikolon
Tun-während:
Regelkreis verlassen
Bedingung wird am Ende der Schleife überprüft
führt mindestens einmal eine falsche Bedingung aus, da die Bedingung später überprüft wird
Am Ende der while-Anweisung steht ein Semikolon.
Stefan
Der Unterschied besteht darin, wann die Bedingung ausgewertet wird. In einem do..while Schleife wird die Bedingung erst am Ende jeder Schleife ausgewertet. Das bedeutet, dass ein do..while Schleife wird stets mindestens einmal laufen. In einem while Schleife wird die Bedingung am Anfang ausgewertet.
Hier gehe ich davon aus wdlen am Anfang von „false“ (dh größer als 1) ausgewertet wird while -Schleife, sodass die While-Schleife niemals ausgeführt wird. In dem do..while Schleife, wird es erst am Ende der ersten Schleife überprüft, sodass Sie das erwartete Ergebnis erhalten.
SPB
Tun Sie während Schleife wird mindestens einmal ausgeführt…….aber während Die Schleife prüft zuerst die Bedingung und kann dann je nach Bedingung ausgeführt werden oder nicht.
In Ihrem Beispiel kann wdlen jeden Garbage-Wert annehmen, der > 2 ist während Schleife wird niemals ausgeführt.
wohingegen tun, während Die Schleife wird ausgeführt und fordert Sie auf, den Wert einzugeben und diesen Wert in der Beendigungsbedingung zu überprüfen
13960800cookie-checkUnterschied zwischen “while”-Schleife und “do while”-Schleifeyes
While-Schleife überprüft die Bedingung zunächst und führt sie dann aus. Aber do-while führt den Rumpf mindestens einmal aus, selbst wenn die Bedingung falsch ist.
– Raghu Srikanth Reddy
3. Januar 2013 um 19:22 Uhr
Beide sind gleichermaßen kaputt, weil keiner von ihnen den Rückgabewert von überprüft
scanf()
.– Nisse Engström
4. Mai 2015 um 19:41 Uhr