switch-Verzweigung

Syntax

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

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 Sprungmarken, die aus einem case  und einem Literal bestehen. Die Angaben in eckigen Klammern sind wieder optional.

Ablauf der Verzweigung

Der Ablauf der switch-Verzweigung ist Folgender:

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 ausgeführt.

#include <print>

int main()
{
  auto var = 2;
  // var auswerten
  switch (var)
  {
  case 1:
    std::println("Variable gleich 1");
  case 2:
    std::println("Variable gleich 2");
  case 3:
    std::println("Variable gleich 3");
    break;
  default:
    std::println("Variable weder 1,2 noch 3");
  }
}

Variable gleich 2
Variable gleich 3

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

#include <print>

int main()
{
    char menu;

    // Menu-Auswahl einlesen
    menu = 'a';
    // Auswahl auswerten
    switch (menu)
    {
    case 'e':
    case 'E':
        std::println("Aktion e/E");
        break;
    case 'a':
    case 'A':
        std::println("Aktion a/A");
        break;
    default:
        std::println("keine Aktion");
    }
}

Aktion a/A

Im Beispiel wird eine char-Variable menu 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.

Sie können übrigens mithilfe der Bibliotheksfunktionen

int std::toupper(int toConvert);
int std::tolower(int toConvert);

Kleinbuchstaben in Großbuchstaben umwandeln und umgekehrt. Der umzuwandelnde Buchstabe wird als int-Datum übergeben. Beide Funktionen liefern als Returnwert den gewandelten Buchstaben. Handelt es sich beim übergebenen Datum nicht um einen Buchstaben, wird der Originalwert zurückgeliefert. Die Funktion ist in der Header-Datei cctype deklariert, die dann einzubinden ist.

Übungen

switch_01

Schreiben Sie die Übung if_02 im dem vorherigen Kapitel if-Verzweigung (Taschenrechner-Programm) so um, dass anstelle der if-Abfragen eine switch-Verzweigung verwendet wird.

Bei korrekter Eingabe ist das Ergebnis der eingegebenen Formel zu berechnen und ausgegeben.

Formel nach folgender Syntax eingeben:
Operand1 Operator Operand2
Operator kann sein: + - * /
Formel ? 5 * 6
Ergebnis: 30

switch_02

Schreiben Sie ein Programm, das nach dem Ohmschen Gesetz

U        = R          * I              d.h.
Spannung = Widerstand * Strom

entweder die Spannung, den Widerstand oder den Strom berechnet. Was berechnet werden soll, ist über die Eingabe einer Kennziffer einzulesen (siehe Programmausgabe). Je nach gesuchtem Wert sind dann die beiden anderen Werte einzulesen. Für die einzulesenden Werte sind Gleitkommadaten zu verwenden.

Die Ausgabe des berechneten Werts soll mit max. 2 Nachkommastellen erfolgen.

Was soll berechnet werden:

1. Die Spannung ueber einen Widerstand
2. Der Strom durch einen Widerstand
3. Der Widerstand

Bitte geben Sie die Ziffer ein (1..3): 2
Spannung und Widerstand eingeben: 235 1000
Der Strom durch den Widerstand betraegt 0.23 Ampere