Namensräume
Varianten
Aktionen

while-Schleife

Von cppreference.com
< c‎ | Sprache

Führt eine Anweisung wiederholt aus, bis der Wert des Ausdrucks gleich Null wird. Der Test findet vor jeder Iteration statt.

Inhalt

[bearbeiten] Syntax

attr-spec-seq(optional) while ( Ausdruck ) Anweisung
expression - beliebiger Ausdruck eines skalaren Typs. Dieser Ausdruck wird vor jeder Iteration ausgewertet, und wenn er gleich Null ist, wird die Schleife beendet.
Anweisung - beliebige Anweisung, typischerweise eine zusammengesetzte Anweisung, die als Körper der Schleife dient
attr-spec-seq - (C23)optionale Liste von Attributen, angewendet auf die Schleifenanweisung

[bearbeiten] Erklärung

Eine while-Anweisung bewirkt, dass die Anweisung (auch als Schleifenkörper bezeichnet) wiederholt ausgeführt wird, bis der Ausdruck (auch als Steuerausdruck bezeichnet) gleich Null ist. Die Wiederholung erfolgt unabhängig davon, ob der Schleifenkörper normal betreten wird oder durch ein goto in die Mitte der Anweisung.

Die Auswertung des Ausdrucks erfolgt vor jeder Ausführung der Anweisung (es sei denn, sie wird durch ein goto betreten). Wenn der Steuerausdruck 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 eine break-Anweisung als beendende Anweisung verwendet werden.

Wenn die Ausführung der Schleife am Ende des Schleifenkörpers fortgesetzt werden muss, kann eine continue-Anweisung als Abkürzung verwendet werden.

Ein Programm mit einer Endlosschleife hat undefiniertes Verhalten, wenn die Schleife keine beobachtbaren Effekte (I/O, volatile-Zugriffe, atomare oder Synchronisationsoperationen) in irgendeinem Teil ihrer Anweisung oder ihres Ausdrucks hat. Dies ermöglicht es den Compilern, alle nicht beobachtbaren Schleifen zu optimieren, ohne nachzuweisen, 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 einen Block-Gültigkeitsbereich: Jany Identifier, der im Ausdruck eingeführt wird, verlässt den Gültigkeitsbereich nach der Anweisung.

(seit C99)

[bearbeiten] Notizen

Boolesche und Zeigerausdrücke werden oft als Schleifen-Steuerausdrücke verwendet. Der boolesche Wert false und der Nullzeigerwert eines beliebigen Zeigertyps sind gleich Null.

[bearbeiten] Schlüsselwörter

while

[bearbeiten] 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

[bearbeiten] 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

[bearbeiten] Siehe auch

C++ Dokumentation für while-Schleife