Fallauswahl
Gerade bei einer größeren Anzahl von Fallunterscheidungen wird die Verwendung von verschachtelten if-else-Konstrukten schnell unübersichtlich. Einfacher und strukturierter ist dies mit der switch-Anweisung möglich.
Der folgende Quellcode zeigt ein einfaches Beispiel für eine Fallauswahl. Wir wollen hier den Preis für einen Stand, z.B. auf einem Flohmarkt, berechnen. Unser Stand kann zwischen einem und fünf Meter lang sein. Die Standgebühr für den 1. Meter beträgt 5 Euro, jeder weitere Meter wird einen Euro günstiger.
/*
Standgebühr: 1. Meter: 5 Euro, 2. Meter: 4 Euro,
3. Meter: 3 Euro, 4. Meter: 2 Euro, 5. Meter: 1 Euro
*/
#include <stdio.h>
int main() {
int meter = 3; //Standbreite in m
int preis = 0;
switch(meter) { case 5: preis += 1;
printf("5. Meter: 1 Euro \n"); case 4: preis += 2;
printf("4. Meter: 2 Euro \n"); case 3: preis += 3;
printf("3. Meter: 3 Euro \n"); case 2: preis += 4;
printf("2. Meter: 4 Euro \n"); case 1: preis += 5;
printf("1. Meter: 5 Euro \n"); }
printf("Gesamtpreis: %d\n", preis);
return 0;
}
Mit der Maus über die einzelnen Codezeilen fahren, um mehr Informationen zu erhalten.
Nach dem Schlüsselwort switch folgt in Klammern der auszuwertende Ausdruck.
Mittels case werden die einzelnen Fälle abgeprüft. Hier wird 1 zum Preis dazuaddiert, wenn die Variable meter den Wert 5 hat. Achtung: Anschließend werden auch die darunterliegenden Fälle bis zum Ende durchlaufen.
Mittels case werden die einzelnen Fälle abgeprüft. Hier wird 2 zum Preis dazuaddiert, wenn die Variable meter den Wert 4 enthält oder auch schon der vorherige Fall durchlaufen wurde.
Mittels case werden die einzelnen Fälle abgeprüft. Hier wird 3 zum Preis dazuaddiert, wenn die Variable meter den Wert 3 enthält oder auch schon der vorherige Fall durchlaufen wurde.
Mittels case werden die einzelnen Fälle abgeprüft. Hier wird 4 zum Preis dazuaddiert, wenn die Variable meter den Wert 2 enthält oder auch schon der vorherige Fall durchlaufen wurde.
Mittels case werden die einzelnen Fälle abgeprüft. Hier wird 5 zum Preis dazuaddiert, wenn die Variable meter den Wert 1 enthält oder auch schon der vorherige Fall durchlaufen wurde.
Nun wollen wir unser Beispiel noch um zwei weitere Komponenten erweitern:
break
Oft wird es Situationen geben, in denen wir die Fallauswahl direkt nach dem Abarbeiten eines Zweiges verlassen wollen. Dies können wir mittels break erreichen.
Mit break verhindern wir das automatische Abarbeiten der nachfolgenden Zweige!
default
Optional können wir einen default-Zweig angeben. Dieser wird dann aufgerufen, wenn keiner der anderen von uns angegebenen Fälle eintritt.
In unserem zweiten Code sind diese Elemente nun ebenfalls vorhanden. Was passiert, wenn wir die break-Anweisung auskommentieren würden? Was, wenn wir den Wert der Variable meter verändern? Einfach mal ausprobieren!
Die Switch-Anweisung wird in der Praxis vor allem zum Abfragen von Tastatureingaben oder bei textbasierten Auswahlmenüs genutzt.