Informiert wie ein Fuchs.

C# While-Schleife: while und do-while mit Beispielen

Die C# While-Schleife wiederholt einen Codeblock, solange eine Bedingung true ist. C# kennt zwei Varianten: Die while-Schleife prüft die Bedingung vor jedem Durchlauf und kann deshalb auch gar nicht laufen. Die do-while-Schleife prüft die Bedingung erst nach dem Durchlauf und läuft daher mindestens einmal.

Eine While-Schleife ist die richtige Wahl, wenn vorher nicht feststeht, wie oft wiederholt werden muss, zum Beispiel beim Einlesen von Eingaben, bis sie gültig sind. Steht die Anzahl fest, ist eine for-Schleife meist übersichtlicher.

while oder do-while: der Unterschied

while do-while
Bedingung geprüft vor jedem Durchlauf nach jedem Durchlauf
Mindestanzahl Durchläufe 0 1
Semikolon am Ende nein ja, nach while (...)
Typischer Einsatz Daten verarbeiten, solange vorhanden Eingabe abfragen, bis sie passt

Grundsyntax der C# While-Schleife

int zaehler = 0;

while (zaehler < 5)
{
    Console.Write(zaehler);
    zaehler++;
}

Ausgabe:

01234

Vor jedem Durchlauf prüft C#, ob zaehler < 5 gilt. Nach dem fünften Durchlauf hat zaehler den Wert 5, die Bedingung ist false, und das Programm springt hinter die Schleife.

Wichtig ist die Zeile zaehler++. Ohne sie würde sich die Bedingung nie ändern, und die Schleife liefe endlos.

Die do-while-Schleife

int zaehler = 0;

do
{
    Console.Write(zaehler);
    zaehler++;
} while (zaehler < 5);

Die Ausgabe ist hier dieselbe: 01234. Der Unterschied zeigt sich erst, wenn die Bedingung von Anfang an false ist:

int n = 5;

while (n < 5)
{
    Console.WriteLine("while");   // wird nie ausgeführt
}

do
{
    Console.WriteLine("do");      // wird einmal ausgeführt
} while (n < 5);

Ausgabe:

do

Achte auf das Semikolon nach while (n < 5);. Bei do-while gehört es zur Syntax, bei der normalen while-Schleife wäre es ein Fehler, dazu mehr unten.

Praxisbeispiel: Eingabe abfragen, bis sie gültig ist

Ein klassischer Fall für do-while ist eine Benutzereingabe. Sie muss mindestens einmal abgefragt werden und dann so lange wiederholt, bis sie passt:

int alter;
bool gueltig;

do
{
    Console.Write("Alter eingeben: ");
    string? eingabe = Console.ReadLine();
    gueltig = int.TryParse(eingabe, out alter) && alter > 0;

    if (!gueltig)
    {
        Console.WriteLine("Bitte eine positive Zahl eingeben.");
    }
} while (!gueltig);

Console.WriteLine($"Du bist {alter} Jahre alt.");

int.TryParse wandelt den Text in eine Zahl um und meldet, ob das geklappt hat, ohne eine Ausnahme auszulösen. Ausführlich erklärt das der Beitrag C# String to int.

break und continue in der While-Schleife

Mit break verlässt du die Schleife sofort. Mit continue überspringst du den Rest des aktuellen Durchlaufs und springst zur nächsten Prüfung der Bedingung.

int i = 0;

while (i < 10)
{
    i++;

    if (i % 2 == 0)
    {
        continue;   // gerade Zahlen überspringen
    }

    if (i > 7)
    {
        break;      // Schleife ganz beenden
    }

    Console.Write(i + " ");
}

Ausgabe:

1 3 5 7

Bei continue in einer while-Schleife ist Vorsicht geboten: Steht die Zählvariable erst hinter dem continue, wird sie übersprungen, und die Schleife hängt fest. Im Beispiel steht i++ deshalb ganz am Anfang des Blocks.

Endlosschleife mit while (true)

Manchmal soll eine Schleife bewusst so lange laufen, bis ein bestimmtes Ereignis eintritt, etwa in einem Menü. Dann schreibt man while (true) und beendet die Schleife gezielt mit break:

while (true)
{
    Console.Write("Befehl (q = beenden): ");
    string? befehl = Console.ReadLine();

    if (befehl == "q")
    {
        break;
    }

    Console.WriteLine($"Ausgeführt: {befehl}");
}

Das ist erlaubt und üblich. Jede while (true)-Schleife braucht aber einen erreichbaren Ausstieg, sonst blockiert sie das Programm.

While oder for: wann welche Schleife?

Situation Passende Schleife
Anzahl der Durchläufe steht vorher fest for
Alle Elemente einer Liste oder eines Arrays durchgehen foreach
Wiederholen, bis eine Bedingung eintritt while
Mindestens einmal ausführen, dann prüfen do-while

Technisch lässt sich jede for-Schleife als while-Schleife schreiben. Die for-Schleife fasst Startwert, Bedingung und Schritt aber in einer Zeile zusammen und ist dadurch bei Zählschleifen leichter zu lesen.

Häufige Fehler

Semikolon direkt hinter while

while (zaehler < 5);   // Fehler!
{
    zaehler++;
}

Das Semikolon beendet die Schleife sofort mit einer leeren Anweisung. Der Block darunter gehört nicht mehr zur Schleife. Ist die Bedingung wahr, läuft das Programm endlos, weil sich zaehler nie ändert.

Bedingung ändert sich nie

Wird die Variable aus der Bedingung im Schleifenkörper nicht verändert, entsteht eine ungewollte Endlosschleife. Prüfe bei jeder While-Schleife, an welcher Stelle sich die Bedingung auf false ändern kann.

Falscher Vergleich bei Grenzen

zaehler < 5 und zaehler <= 5 unterscheiden sich um einen Durchlauf. Solche Fehler um eins fallen oft erst bei der Ausgabe auf. Ein kurzer Test mit kleinen Werten zeigt schnell, ob die Grenze stimmt.

Häufige Fragen zur C# While-Schleife

Gibt es in C# eine until-Schleife?

Nein. C# hat kein eigenes until. Den gleichen Effekt erreichst du mit einer verneinten Bedingung, zum Beispiel do { ... } while (!fertig);.

Kann ich eine While-Schleife verschachteln?

Ja, Schleifen lassen sich beliebig ineinander setzen. Beachte, dass break und continue nur die innerste Schleife betreffen, in der sie stehen.

Wo lerne ich die Grundlagen von C#?

Einen Einstieg mit erstem Programm und Lernpfad findest du im Beitrag C# lernen. Für Verzweigungen mit mehreren Fällen eignet sich die C# Switch-Anweisung.

Schreibe einen Kommentar