Die do-while-Schleife
Die while-Schleife prüft ihre Bedingung vor jedem Durchlauf. Ist die Bedingung gleich am Anfang falsch, wird der Block kein einziges Mal ausgeführt. Meistens ist genau das gewünscht. Manchmal muss der Block aber mindestens einmal laufen. Dafür hat C die do ... while-Schleife, die die Bedingung nach jedem Durchlauf prüft:
int zaehler = 1;
do {
printf("%d\n", zaehler);
zaehler++;
} while (zaehler <= 3);1
2
3Zuerst kommt das Schlüsselwort do, dann der Block, und die Bedingung steht am Ende, nach der schließenden Klammer. Das Programm führt den Block aus, prüft dann die Bedingung und führt den Block erneut aus, wenn sie wahr ist. Beachte das Semikolon nach der Bedingung: } while (zaehler <= 3);. Ohne es meldet der Compiler error: expected ';' after do/while statement.
Der Unterschied zeigt sich, wenn die Bedingung von Anfang an falsch ist:
int zaehler = 10;
do {
printf("%d\n", zaehler);
zaehler++;
} while (zaehler <= 3);10Der Block läuft einmal und gibt 10 aus, und erst dann stellt die Schleife fest, dass 11 <= 3 falsch ist. Eine while-Schleife mit derselben Bedingung würde nichts ausgeben.
Wann ist das nützlich? Sagen wir, du willst die Ziffern einer Zahl zählen. Die Ganzzahldivision durch 10 lässt die letzte Ziffer wegfallen (2026 / 10 ist 202), du kannst also so lange teilen, bis nichts mehr übrig ist: 2026, 202, 20, 2, 0. Das sind vier Divisionen, die Zahl hat also vier Ziffern:
int zahl = 2026;
int ziffern = 0;
do {
ziffern++;
zahl /= 10;
} while (zahl > 0);
printf("Ziffern: %d\n", ziffern);Ziffern: 4Für 2026 würde auch eine while-Schleife funktionieren. Aber auch die Zahl 0 wird mit einer Ziffer geschrieben, und für 0 würde while (zahl > 0) gar nicht laufen, das Programm würde also sagen, sie habe 0 Ziffern. do ... while führt den Block mindestens einmal aus, also bekommt die 0 ihre eine Ziffer.
In der Praxis wird do ... while viel seltener verwendet als while und for. In Programmen auf deinem eigenen Computer ist es praktisch, wenn ein Programm den Benutzer nach etwas fragt und erneut fragt, solange die Antwort falsch ist. Die Programme auf dieser Seite bekommen ihre Daten aus Variablen, du brauchst es hier also nicht oft.
So schreibst du es:
Anweisungen
- 1
Das Programm im Editor zählt die Ziffern von
zahl. Führe es aus: Es gibtZiffern: 0aus, aber die 0 wird mit einer Ziffer geschrieben. Schreibe diewhile-Schleife alsdo ... while-Schleife um:dovor dem Block undwhile (zahl > 0);nach seiner schließenden Klammer. Dann gibt das ProgrammZiffern: 1aus. - 2
Prüfe, ob die Schleife auch für andere Zahlen funktioniert: Ändere den Wert von
zahlauf2026. Das Programm gibtZiffern: 4aus.