Die switch-Anweisung
Manchmal wählt ein Programm anhand des genauen Werts einer Variablen, was zu tun ist: Taste 1 an einem Getränkeautomaten macht Kaffee, Taste 2 Tee und so weiter. Du könntest das mit else if schreiben, aber C hat dafür eine übersichtlichere Anweisung, switch:
int tag = 3;
switch (tag) {
case 1:
printf("Montag\n");
break;
case 2:
printf("Dienstag\n");
break;
case 3:
printf("Mittwoch\n");
break;
default:
printf("Ein anderer Tag\n");
break;
}Das gibt Folgendes aus:
Mittwochswitch nimmt den Wert in den Klammern, hier den Wert von tag, und springt zu dem case mit demselben Wert. Nach case kommen ein Wert und ein Doppelpunkt, darunter die auszuführenden Anweisungen. break beendet das switch: Das Programm läuft hinter der schließenden Klammer weiter. default fängt alle Werte ab, die kein eigenes case haben, genau wie das else am Ende einer else if-Kette. Es ist optional und steht meist ganz am Ende. Im letzten Zweig ist break nicht nötig, weil das switch dort sowieso endet, aber es ist eine gute Gewohnheit, es in jeden Zweig zu schreiben.
Gib auf break acht. Ohne es hält das Programm nicht beim nächsten case an: Es fällt durch und führt auch die Anweisungen der folgenden Fälle aus, bis es auf ein break oder das Ende des switch trifft:
int tag = 2;
switch (tag) {
case 1:
printf("Montag\n");
case 2:
printf("Dienstag\n");
case 3:
printf("Mittwoch\n");
default:
printf("Ein anderer Tag\n");
}Das gibt Folgendes aus:
Dienstag
Mittwoch
Ein anderer TagDas Programm ist zu case 2 gesprungen und hat dann alles darunter ausgeführt. Der Compiler meldet nichts, wenn ein switch mehr ausgibt, als es soll, such also nach einem fehlenden break.
Manchmal ist das Durchfallen genau das, was du willst: wenn mehrere Werte dieselben Anweisungen haben. Dann schreibst du ihre case-Zeilen untereinander:
int tag = 6;
switch (tag) {
case 6:
case 7:
printf("Wochenende\n");
break;
default:
printf("Werktag\n");
break;
}Das gibt Folgendes aus:
Wochenendeswitch funktioniert nur mit ganzen Zahlen und Zeichen, wie case 3: oder case 'A':. Bereiche wie temperatur > 25 kann es nicht prüfen, und mit Dezimalzahlen funktioniert es nicht: switch (preis) mit einem double lässt den Compiler error: statement requires expression of integer type ('double' invalid) melden. Verwende dafür if und else if.
So schreibst du es:
Anweisungen
- 1
Der Getränkeautomat hat einen Fehler: Taste 2 liefert Tee und heiße Schokolade. Führe das Programm aus und füge dann das fehlende
breakhinzu, damit es nurTeeundDanke!ausgibt. - 2
Füge am Ende des
switch, unter dem letztenbreak, einendefault-Zweig hinzu, derUnbekannte Tasteausgibt. - 3
Ändere
tastein7und führe das Programm aus. Keincasehat den Wert 7, also gibt das ProgrammUnbekannte TasteundDanke!aus.