Mehrfachverzweigung: switch case

Die Abfrage mit if ermöglicht die Unterscheidung zweier Fälle. Wenn auf Grund verschiedener Werte unterschiedliche Anweisungen ausgeführt werden sollen, können mehrere verschachtelte if-Anweisungen hintereinander gesetzt werden oder es kann eine spezielle Fallunterscheidung verwendet werden. Ein schönes Beispiel ist ein Fahrstuhl in einem Kaufhaus, in dem eine Vielzahl von Stockwerken zur Auswahl stehen und in jedem Stockwerk andere Waren angeboten werden. Zunächst wird die Aufgabe durch kaskadierende if-Anweisungen gelöst:

if (Stockwerk == 1)
{
     cout << "Süssigkeiten, Bücher" << endl;
} 
else if (Stockwerk == 2)
{
    cout << "Bekleidung" << endl;
}
else if (Stockwerk == 3)
{
    cout << "Bekleidung" << endl;
}
else if (Stockwerk == 4)
{
    cout << "Spielzeug" << endl;
}
else if (Stockwerk == 5)
{
    cout << "Unterhaltungselektronik" << endl;
}
else
{
    cout << "Garage" << endl;
}

Diese Konstruktion lässt sich durch die Mehrfachverzweigung vereinfachen.

int Stockwerk;
 
cin >> Stockwerk;
 
switch (Stockwerk)
{
    case 1:
        cout << "Süssigkeiten, Bücher" << endl;
        break;
    case 2:
        cout << "Bekleidung" << endl;
        break;
    case 3:
        cout << "Bekleidung" << endl;
        break;
    case 4:
        cout << "Spielzeug" << endl;
        break;
    case 5:
        cout << "Unterhaltungselektronik" << endl;
        break;
    default:
        cout << "Garage" << endl;
        break;
}

Die Fallunterscheidung beginnt mit dem Schlüsselwort switch. In der darauf folgenden Klammer steht der ganzzahlige Ausdruck, dessen Ergebnis die Verzweigung steuert. Ein Ausdruck kann eine Variable sein, wie im Beispiel die Variable Stockwerk. Hier könnte aber auch eine Berechnung stehen, die zu einem ganzzahligen Ergebnis führt. Es können auch Buchstaben verwendet werden, da Buchstaben aus Sicht von C++ letztlich nichts anderes als getarnte Zahlen sind. Im Beispiel wird die Variable Stockwerk ausgewertet, die offensichtlich eine ganze Zahl aufnehmen kann.

Beispiel Wochentag

Der einer Zahl zwischen 0 und 6 entsprechende Wochentag soll ausgegeben werden. (0…Montag, 1…Dienstag, usw.)

int wotag;
cout << "Wochentag. Zahl zwischen 0 und 6 eingeben: ";
cin >> wotag;
 
switch (wotag)
  {
  case 0: cout << "Montag\n"; break;
  case 1: cout << "Dienstag\n"; break;
  case 2: cout << "Mittwoch\n"; break;
  case 3: cout << "Donnerstag\n"; break;
  case 4: cout << "Freitag\n"; break;
  case 5: cout << "Samstag\n"; break;
  case 6: cout << "Sonntag\n"; break;
  default: cout << "Falsche Zahl eingegeben!";
  }

Bei der Ausführung der switch-Anweisung wird der aktuelle Wert der Auswahlgröße (wotag) der Reihe nach mit den case-Konstanten (0,1,2,3,4,5,6) verglichen.

Sobald die erste Übereinstimmung festgestellt wird, werden die darauffolgenden Anweisungen ausgeführt. Um dies zu verhindern verwendet man die Anweisung break. break heißt, dass die switch-Anweisung verlassen wird. Ohne break würden nach der ersten Übereinstimmung alle folgenden Wochentage auch ausgegeben werden.

Der Typ der Auswahlgröße darf nicht float sein.

Beispiel Monatslänge

Die Monatsnummer soll eingegeben werden. Anschließend soll die Anzahl der Tage des Monats ausgegeben werden.

switch (monat)
  {case 2: cout << "28 oder 29 Tage (Schaltjahr)"; break;
   case 1: case 3: case 5: case 7: case 8: case 10: case 12: cout << "31 Tage"; break;
   case 4: case 6: case 9: case 11: cout << "30 Tage"; break;
   default: cout << "Kein Monat!";

Weitere Beispiele

Schreibe ein Programm,…

a) Schularbeitsnote … das Schularbeitsnoten in verbale Beurteilungen umrechnet. (z.B. 1 … Sehr gut, etc.)