Unterschied zwischen “while”-Schleife und “do while”-Schleife

Lesezeit: 4 Minuten

Benutzeravatar von narayanpatra
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

while(wdlen<2){
        printf("Word length... ");
        scanf("%d", &wdlen);
    } 

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

Benutzeravatar von hydrogen
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

Benutzeravatar von Mahmoud
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.

while(wdlen<2){
    printf("Word length... ");
    scanf("%d", &wdlen);
} 

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.

Benutzeravatar von Unnati Shah
Unnati Schah

Während:

  1. Eingangsregelkreis

  2. Bedingung wird vor Ausführung der Schleife überprüft

  3. Schleife niemals ausführen, wenn Bedingung falsch ist

  4. Am Ende der while-Anweisung steht kein Semikolon

Tun-während:

  1. Regelkreis verlassen

  2. Bedingung wird am Ende der Schleife überprüft

  3. führt mindestens einmal eine falsche Bedingung aus, da die Bedingung später überprüft wird

  4. Am Ende der while-Anweisung steht ein Semikolon.

Benutzeravatar von Stephen
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.

Benutzeravatar von SPB
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

1396080cookie-checkUnterschied zwischen “while”-Schleife und “do while”-Schleife

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy