Title: Nachlese: Switch Case
Course: PAC++ SchülerInnen > Section: GUI

Einführung & Motivation

IF und ELSE sind uns schon bekannt, um Entscheidungen zu treffen. Mit IF können wir meist nicht alle Wege, für die sich eine Userin oder ein User entscheidet, abdecken. Wir brauchen mehr Entscheidungen. Dafür haben wir Switch Case.

Bemerkung: Du kannst links oben mit einem Klick auf Einstellungen/Buch-Administration/Buch drucken die gesamte Nachlese ausdrucken.

How to?

In einem ersten Schritt betrachten wir die allgemeine Struktur von SWITCH CASE. Danach werden wir uns Beispiele ansehen.

Allgemeine Struktur

In der Programmiersprache C++ wird SWITCH CASE wie folgt strukturiert:

switch ( Bedingung ) {
    case Ausdruck_1 : Anweisung(en); break;
    case Ausdruck_2 : // Anweisung(en); break;
    ... ...
    case Ausdruck_n : // Anweisung(en); break;
    default : // Anweisung(en);
}

Zunächst wird das Schlüsselwort switch zum Starten dieses Prozesses geschrieben. In die Klammer kommt dann die Bedingung, die geprüft werden soll. Da wir mehrere Anweisungen haben, die zusammengehören, schreiben wir den Block in {} (geschwungene Klammern).

Dann nutzen wir das Schlüsselwort case, um einen eintretenden Fall zu definieren, z. B. wenn die Bedingung 1 ist, dann soll der Fall 1, also case 1, in Kraft treten. Der Doppelpunkt sagt uns dann, was passieren soll. Nun kommt eine Anweisung, z. B. "Tu das!". Der Compiler wird ab nun solange weiterarbeiten bis er ein break; findet. Dann wird der Block switch verlassen und das Programm arbeitet mit der nächsten Zeile nach der Klammer " } " weiter. Wir können nun so viele Fälle definieren wie wir wollen.

Wenn wir alle unsere notwendigen Fälle haben, können wir immer noch einen Standard Fall definieren, falls unsere UserInnen etwas anderes eingeben als erwartet. Dieser startet mit dem Schlüsselwort default: und erwartet eine oder mehrere Anweisungen. Hier brauchen wir kein break mehr, da wir ja am Ende des Blocks sind.

Anmerkung break

Ein Switch Case funktioniert nach der folgenden Logik:

Eine Variable wird geprüft. Ab der Stelle, an der die Überprüfung positiv war, werden bis zum nächsten break; alle Anweisungen - auch aus anderen Fällen (cases) (!!!) - ausgeführt. Somit endet ein switch case ohne break beim Ende des Block, also bei der geschlossenen geschwungenen Klammer }.

Ein Beispiel ohne break:

test = 2;
switch ( test ) {
    case 1: cout << "Eins";
    case 2: cout << "Zwei";
    case 3: cout << "Drei";
    default : cout << "Eintausend";
}

- case 1:  test  hat den Wert 2, daher ist die Übeprüfung negativ, die Anweisung wird nicht ausgeführt.
- case 2: test hat den Wert 2, daher ist die Überprüfung positiv und die Anweisung wird ausgeführt.
- case 3: test hat den Wert 2, die Überprüfung würde daher negativ sein, aber da zuvor bereits case 2 positiv war, wird auch diese Anweisung ausgeführt. Es wird alles bis zum nächsten break; ausgeführt - da kein break; vorhanden ist, werden alle Anweisungen (das was nach dem :  steht) einfach ausgeführt.

In diese Fall werden wir am Bildschirm Folgendes sehen: ZweiDreiEintausend. Denn im Hintergrund ist folgendes passiert: Alles wird ausgeführt, sobald das erste Mal eine Überprüfung positiv ist. Das ist bei "case 2" der Fall. Zunächst  wird "Zwei" ausgeben, dann "Drei", dann "Eintausend". Es wird solange ausgegeben, bis der Block beendet wird. Break setzen ist somit wirklich wichtig!

Ein Beispiel mit break:

test = 2;
switch ( test ) {
    case 1: cout << "Eins"; break;
    case 2: cout << "Zwei"; break;
    case 3: cout << "Drei"; break;
    default : cout << "Eintausend";
}

Jetzt wird nur "Zwei" am Bildschirm zu sehen sein. Wie erwartet ;)

Beispiele

int test=0;
cin >> test;
switch ( test ) {
    case 1 : cout << "Haha!"; break;
    case 2 : cout << "Ohhh, nein!"; break;
    default : cout << "Fehler!";
}


Ein simples Beispiel: Die Userin oder der User wird aufgefordert, eine Zahl zu schreiben. Diese wird dann getestet, und ein Text wird ausgegeben. Wenn die Userin oder der User 1 eingibt, dann wird der Text "Haha!" ausgegeben. Wenn die Userin oder der User 2 eingibt, dann kommt "Ohhh, nein!". Falls die Userin oder der User etwas anderes als 1 und 2 eingibt, dann wird "Fehler" ausgegeben.

Anmerkung: Dieses Beispiel könnte auch mit IF ELSE, ELSE IF umgesetzt werden.

Anderes Beispiel:

Wir können auch statt der Zahlen z. B. Wörter verwenden. Es würde dann so aussehen:

string test="null";
cin >> test;
switch ( test ) {
    case "eins" : cout << "Haha!"; break;
    case 'zwei' : cout << "Ohhh, nein!"; break;
    default : cout << 'Fehler!';
}

Ausblick

Switch Case wird in der Programmierung benutzt, um Mehrfachverzweigungen zu erzeugen. Sie geben der oder dem Programmierenden die Möglichkeit, viele verschiedene Pfade für UserInnen vorzubereiten.