Fallunterscheidungen, Mehrfachverzweigung

Bisher haben wir für Verzweigungen im Programmablauf nur die einseitig und die zweiseitig bedingte Anweisung (if... und if...else...) verwendet.

Zur Verarbeitung von Ereignissen wie Tastendrücken kann eine Mehrfachverzweigung sehr hilfreich sein. Allgemein spricht man in diesem Zusammenhang auch von verschiedenen Fällen in einer Fallunterscheidung.

Strukturblock einer Mehrfachverzweigung bzw. Fallunterscheidung
allgemeiner Strukturblock einer Fallunterscheidung/Mehrfachverzweigung

Zunächst wird der Ausdruck im oberen Dreieck bewertet, d.h. dessen Wert wird ermittelt. Dies muss in C++ letztendlich einen ganzzahligen Wert ergeben, der auch ein Zeichen repräsentieren kann. Auf Grund dieses Wertes wird dann diejenige Anweisung abgearbeitet, welche diesem Wert zugeordnet ist. Ergibt sich der Wert 2, wird also die Anweisung 2 ausgeführt. Falls der resultierende Wert in keinem der Zweige aufgeführt ist und ein sonst-Zweig vorliegt, wird dessen Alternativanweisung ausgeführt. Es wird also höchstens eine der Anweisungen abgearbeitet.

Beispiel:

Beispiel-Strukturblock einer Fallunterscheidung/Mehrfachverzweigung

In C++ werden für eine Fallunterscheidung die Schlüsselwörter switch, case, break und default verwendet.

Der C++-Code zum Beispiel-Strukturblock lautet:

switch (Taste)
{
 case 'a':
  cout << "1. Fall";
  break;
 case 'b':
  cout << "2. Fall";
  break;
 case 'c':
  cout << "3. Fall";
  break;
 case 'd':
  cout << "4. Fall";
  break;
 default:
  cout << "ungueltig";
}

Der bewertete Ausdruck (hier Taste) steht in runden Klammern hinter switch.

Die eigentliche Fallunterscheidung muss in geschweiften Klammern stehen.

Die einzelnen Fälle werden jeweils mit case, gefolgt von einer ganzzahligen Konstanten (hier 'a', 'b', ...) und einem abschließenden Doppelpunkt eingeleitet. Dahinter oder darunter folgen die dem Wert bzw. Fall zugeordneten Anweisungen, die nicht durch geschweifte Klammern gebündelt werden müssen.

Mit break wird die Fallunterscheidung verlassen. Ohne ein solches break würden auch die Anweisungen in den folgenden Fällen abgearbeitet.

Die Alternativanweisung steht hinter default:.

Prinzipiell kann eine Mehrfachverzweigung durch verschachtelte zweiseitig bedingte Anweisungen ersetzt werden, was aber eher unübersichtlich wird und zu weniger performantem Maschinencode führt.

Zum obigen Beispiel:

Struktogramm zur Mehrfachverzweigung per zusammengesetzter Zweifachverzweigungen

C++-Code

if (Taste=='a')
 cout << "1. Fall";
else if (Taste=='b')
 cout << "2. Fall";
else if (Taste=='c')
 cout << "3. Fall";
else if (Taste=='d')
 cout << "4. Fall";
else
 cout << "ungueltig";