Namespaces
Variants

do-while loop

From cppreference.net

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 do-while -Anweisung einen 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 werden als gleich null verglichen.

Schlüsselwörter

do , while

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