while loop
Führt eine statement wiederholt aus, bis der Wert von expression gleich null wird. Der Test findet vor jeder Iteration statt.
Inhaltsverzeichnis |
Syntax
attr-spec-seq
(optional)
while (
expression
)
statement
|
|||||||||
| expression | - | beliebiger Ausdruck vom skalaren Typ . Dieser Ausdruck wird vor jeder Iteration ausgewertet, und wenn er gleich Null verglichen wird, wird die Schleife verlassen. |
| statement | - | beliebige Anweisung , typischerweise eine zusammengesetzte Anweisung, die als Rumpf der Schleife dient |
| attr-spec-seq | - | (C23) optionale Liste von Attributen , angewendet auf die Schleifenanweisung |
Erklärung
Eine
while
-Anweisung bewirkt, dass die
Anweisung
(auch genannt
der Schleifenkörper
) wiederholt ausgeführt wird, bis der
Ausdruck
(auch genannt
steuernder Ausdruck
) gleich Null verglichen wird. Die Wiederholung erfolgt unabhängig davon, ob der Schleifenkörper normal oder durch ein
goto
in die Mitte der
Anweisung
eingetreten wird.
Die Auswertung des Ausdrucks findet vor jeder Ausführung des Statements statt (sofern nicht durch ein goto betreten). Falls der kontrollierende Ausdruck nach dem Schleifenkörper ausgewertet werden muss, kann die do-while-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 Synchronisationsoperationen) in irgendeinem Teil ihrer Anweisung oder Ausdrucks aufweist. Dies erlaubt es Compilern, alle unbeobachtbaren Schleifen zu optimieren, ohne zu beweisen, dass sie terminieren. Die einzigen Ausnahmen sind Schleifen, bei denen der Ausdruck ein konstanter Ausdruck ist; while ( true ) ist immer eine Endlosschleife.
|
Wie bei allen anderen Auswahl- und Iterationsanweisungen etabliert die while-Anweisung Blockgültigkeitsbereich : Jeder Bezeichner, der im Ausdruck eingeführt wird, verliert seine Gültigkeit nach der Anweisung . |
(seit C99) |
Hinweise
Boolesche und Zeigerausdrücke werden häufig als Schleifensteuerungsausdrücke verwendet. Der boolesche Wert
false
und der Nullzeigerwert jedes Zeigertyps vergleichen gleich mit Null.
Schlüsselwörter
Beispiel
#include <stdio.h> #include <stdlib.h> #include <string.h> enum { SIZE = 8 }; int main(void) { // trivial example int array[SIZE], n = 0; while(n < SIZE) array[n++] = rand() % 2; puts("Array filled!"); n = 0; while(n < SIZE) printf("%d ", array[n++]); printf("\n"); // classic strcpy() implementation // (copies a null-terminated string from src to dst) char src[] = "Hello, world", dst[sizeof src], *p = dst, *q = src; while((*p++ = *q++)) // double parentheses (that are not strictly necessary) // used to suppress warnings, ensuring that this is an // assignment (as opposed to a comparison) by intention, // whose result is used as a truth value ; // null statement puts(dst); }
Ausgabe:
Array filled! 1 0 1 1 1 1 0 0 Hello, world
Referenzen
- C17-Standard (ISO/IEC 9899:2018):
-
- 6.8.5.1 Die while-Anweisung (S: 109)
- C11-Standard (ISO/IEC 9899:2011):
-
- 6.8.5.1 Die while-Anweisung (S: 151)
- C99-Standard (ISO/IEC 9899:1999):
-
- 6.8.5.1 Die while-Anweisung (S: 136)
- C89/C90 Standard (ISO/IEC 9899:1990):
-
- 3.6.5.1 Die while-Anweisung
Siehe auch
|
C++-Dokumentation
für
while
Schleife
|