Mehrfachverzweigung wird in C mit der switch
-KOntrollstruktur
realisiert. Dem reservierten Wort switch
folgt der
Kontrollausdruck in runden Klammern und bei switch
immer
ein Block. Innerhalb dieses Blockes stehen sog. Case-Labels, die aus
dem reservierten Wort case
gefolgt von einem konstanten
Ausdruck gefolgt von einem Doppelpunkt bestehen. Ist der Wert des
kontrollierenden Ausdrucks gleich dem konstanten Ausdrucks eines der
Case-Labels, so wird die Programmausführung an diesem Label
fortgeführt. Häufig will man nun, daß der Block bei dem folgenden
Caselabel abgebrochen wird, da man ja hier einen neuen Fall bearbeiten
möchte. Hierzu muß man explizit den reservierten Befehl break
verwenden.
Ein besonderel Label wied durch das reservierte Wort default
gefolgt von einem Doppelpunkt gekennzeichnet. DIese Label muß immer
das letzte Label sein, und dient als EInsprungpunkt für alle die
Fälle, die nicht bereits durch eins der anderen Labels abgedeckt ist.
Ein Beispiel:
switch(a){ case 1: printf("a ist eins\n"); break; case 2: printf("a ist zwei\n") break; case 3: printf("a ist drei\n") break; default: printf("a ist weder 1 noch 2 noch 3\n") }
In dieser Form druckt das Programm den Wert der Variablen a aus, wenn
dieser 1 2 oder 3 ist, und gibt eine entsprechende Meldung, wenn dies
nicht so ist. Hätte man die break
-Befehle weggelassen, und
währe a z.B. 1, hätte das Programm auf den Bildschirm
a ist eins a ist zwei a ist drei a ist weder eins noch zwei noch drei
geschreiben, da kein break
es davon abgehalten hätte, die
nachfolgenden Befehle auszuführen. Solche Konstrukte sind
gelegentlich sinnvoll, meistens wird aber die Form mit break
gewählt. Meint man wirklich ein weiterlaufen des Programms ins
nächste Label hinein, so sollte man dies durch einen Kommentar
kenntlich machen.
Auf der anderen Seite ermöglicht diese Mimik aber auch, daß man zwischen zwei Label beliebig viele Befehle schreiben darf, ohne diese extra zu einem Block klammern zu müssen.