do-while loop
Führt eine Anweisung wiederholt aus, bis der Wert des Bedingungs- Ausdrucks false wird. Der Test erfolgt nach jeder Iteration.
Inhaltsverzeichnis |
Syntax
attr-spec-seq
(optional)
do
statement
while (
expression
)
;
|
|||||||||
| attr-spec-seq | - | (C23) eine optionale Liste von Attributen , angewendet auf die Schleifenanweisung. |
| statement | - | eine beliebige Anweisung , typischerweise eine zusammengesetzte Anweisung, die den Rumpf der Schleife bildet. |
| expression | - | ein beliebiger Ausdruck von skalarem Typ . Dieser Ausdruck wird nach jeder Iteration ausgewertet, und wenn er gleich Null ist, wird die Schleife verlassen. |
Erklärung
Eine do - while -Anweisung bewirkt, dass die Anweisung (auch Schleifenrumpf genannt ) wiederholt ausgeführt wird, bis der Ausdruck (auch Steuerausdruck genannt ) gleich 0 ist. Die Wiederholung erfolgt unabhängig davon, ob der Schleifenrumpf normal oder durch ein goto in die Mitte der Anweisung eingetreten wird.
Die Auswertung des Ausdrucks erfolgt nach jeder Ausführung des Statements (ob normal ausgeführt oder durch ein goto ). Wenn der kontrollierende Ausdruck vor dem Schleifenkörper ausgewertet werden muss, kann die while-Schleife oder die for-Schleife verwendet werden.
Wenn die Ausführung der Schleife an einem bestimmten Punkt beendet werden muss, kann die break-Anweisung als abschließende Anweisung verwendet werden.
Wenn die Ausführung der Schleife am Ende des Schleifenkörpers fortgesetzt werden muss, kann die continue-Anweisung als Abkürzung verwendet werden.
Ein Programm mit einer Endlosschleife hat undefiniertes Verhalten, wenn die Schleife kein beobachtbares Verhalten (E/A, volatile Zugriffe, atomare oder Synchronisierungsoperationen) in irgendeinem Teil ihrer Anweisung oder Expression aufweist. Dies erlaubt es Compilern, alle unbeobachtbaren Schleifen zu optimieren, ohne zu beweisen, dass sie terminieren. Die einzigen Ausnahmen sind Schleifen, bei denen die Expression eine konstante Expression ist; do { ... } while ( true ) ; ist immer eine Endlosschleife.
|
Wie bei allen anderen Auswahl- und Iterationsanweisungen etabliert die
|
(seit C99) |
Hinweise
Boolesche und Zeigerausdrücke werden häufig als Schleifensteuerungsausdrücke verwendet. Der boolesche Wert false und der Nullzeigerwert jedes Zeigertyps werden als gleich null verglichen.
Schlüsselwörter
Beispiel
#include <stdio.h> #include <stdlib.h> enum { SIZE = 8 }; int main(void) { // trivial example int array[SIZE], n = 0; do array[n++] = rand() % 2; // the loop body is a single expression statement while(n < SIZE); puts("Array filled!"); n = 0; do { // the loop body is a compound statement printf("%d ", array[n]); ++n; } while (n < SIZE); printf("\n"); // the loop from K&R itoa(). The do-while loop is used // because there is always at least one digit to generate int num = 1234, i=0; char s[10]; do s[i++] = num % 10 + '0'; // get next digit in reverse order while ((num /= 10) > 0); s[i] = '\0'; puts(s); }
Mögliche Ausgabe:
Array filled! 1 0 1 1 1 1 0 0 4321
Referenzen
- C23-Standard (ISO/IEC 9899:2024):
-
- 6.8.6.3 Die do-Anweisung (S: 156)
- C17-Standard (ISO/IEC 9899:2018):
-
- 6.8.5.2 Die do-Anweisung (S: 109)
- C11-Standard (ISO/IEC 9899:2011):
-
- 6.8.5.2 Die do-Anweisung (S: 151)
- C99-Standard (ISO/IEC 9899:1999):
-
- 6.8.5.2 Die do-Anweisung (S: 136)
- C89/C90-Standard (ISO/IEC 9899:1990):
-
- 3.6.5.2 Die do-Anweisung
Siehe auch
|
C++ Dokumentation
für
do
-
while
Schleife
|