Namespaces
Variants

while loop

From cppreference.net

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

while

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