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.