C++ Tutorial

switch Verzweigung

Syntax

Um in Abhängigkeit von einem ganzzahligen Ausdruck verschiedene Anweisungen zu durchlaufen, wird die switch-Verzweigung eingesetzt. Sie hat folgende Syntax:

switch ([INIT;] AUSDRUCK)
{
case K1:
   ANWEISUNGEN1
   [break;]
case K2:
   ANWEISUNGEN2
   [break;]
...
case Kx:
   ANWEISUNGENx
   [break;]
[default:
   ANWEISUNGENy]
}

Eingeleitet wird die Verzweigung durch das Schlüsselwort switch. Innerhalb der switch-Klammer steht  optional ein Initialisierungsausdruck INIT und danach der auszuwertende Ausdruck AUSDRUCK. Darauf folgt ein Block {...} und innerhalb des Blocks stehen die mit einem case eingeleiteten Einsprungmarken. Die Angaben in eckigen Klammern sind wieder optional.

Ablauf der Verzweigung

Der Ablauf der switch-Verzweigung ist Folgender:

  • Zuerst wird der Initialisierungsausdruck INIT ausgewertet.
  • Anschließend wird der Ausdruck AUSDRUCK ausgewertet. Dieser Ausdruck muss ein ganzzahliges oder char Ergebnis liefern; Gleitkomma-Ausdrücke sind nicht erlaubt!
  • Das Ergebnis wird mit den nach einem case stehenden Literalen Kx verglichen. Stimmt das Ergebnis mit einem Literal überein, werden die Anweisungen nach der case-Anweisung ausgeführt.
  • Stimmt das Ergebnis mit keinem der Literale überein, werden die Anweisungen nach der optionalen default-Anweisung ausgeführt.

Fehlt der default-Zweig und ergibt die Auswertung des switch-Ausdrucks keine Übereinstimmung mit einem der aufgeführten case-Literale, wird keine Aktion ausgeführt und es geht mit der nächsten Anweisung nach dem switch-Block weiter.

Die innerhalb eines case-Zweigs stehenden Anweisungen müssen nicht in einen Block {...} eingeschlossen werden, mit einer Ausnahme: Werden innerhalb eines case-Zweigs Variablen definiert, muss dies in einem Block {...} erfolgen.

break Anweisung

Die break-Anweisung innerhalb eines switch-Blocks bewirkt ein unmittelbares Verlassen des Blocks, d.h. nach dem break wird als nächstes die Anweisung ausgeführt, die nach dem switch-Block folgt. Ohne break-Anweisung werden alle nach der Einsprungsmarke (case Kx:) folgenden Anweisungen bis zum Ende des switch-Blocks oder bis zum Erreichen eines break ausführt.

1: // SWITCH-CASE mit break-Anweisung
2: auto var = 2;
3: switch (var)
4: {
5: case 1:
6:     std::cout << "Variable gleich 1\n";
7:     break;
8: case 2:
9:     std::cout << "Variable gleich 2\n";
10:    break;
11: case 3:
12:    std::cout << "Variable gleich 3\n";
13:    break;
14: default:
15:    std::cout << "Variable weder 1,2 noch 3\n";
16: }

Variable gleich 2

1: // SWITCH-CASE ohne break-Anweisung
2: auto var = 2;
3: switch (var)
4: {
5: case 1:
6:     std::cout << "Variable gleich 1\n";
7: case 2:
8:     std::cout << "Variable gleich 2\n";
9: case 3:
10:    std::cout << "Variable gleich 3\n";
11: default:
12:    std::cout << "Variable weder 1,2 noch 3\n";
13: }

Variable gleich 2
Variable gleich 3
Variable weder 1,2 noch 3

Sind für mehrere Ergebnisse des switch-Ausdrucks die gleichen Anweisungen auszuführen, können mehrere case-Anweisungen unmittelbar aufeinanderfolgen.

1: char alpha;
2: ...
3: switch (alpha)
4: {
5: case 'e':
6: case 'E':
7:     Aktion1;
8:     break;
9: case 'a':
10: case 'A':
11:    Aktion2;
12: }

Im Beispiel wird eine char-Variable alpha ausgewertet. Und unabhängig davon, ob ein e oder a als Groß- oder Kleinbuchstabe in der Variable abgelegt ist, es wird immer die gleiche Aktion ausgeführt.


Copyright 2024 © Wolfgang Schröder
E-Mail mit Fragen oder Kommentaren zu dieser Website an: info@cpp-tutor.de
Impressum & Datenschutz