next up previous contents
Nächste Seite: Schleifen Aufwärts: Verzweigungen Vorherige Seite: if-Abfragen mit/ohne else-Zweig   Inhalt

switches

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.


next up previous contents
Nächste Seite: Schleifen Aufwärts: Verzweigungen Vorherige Seite: if-Abfragen mit/ohne else-Zweig   Inhalt
Thomas Neuhaus
2001-01-14