C++
VeröffentlichtRevision 1

Mehrere feste Fälle mit switch

switch wählt einen Fall anhand eines ganzzahligen oder Aufzählungswerts. Ein Fall heißt im Code case. Ein Aufzählungstyp ordnet benannte mögliche Werte zusammen; enum erklärt ihn später. Strings und Gleitkommazahlen sind keine passenden unmittelbaren switch-Werte.

Mehrere feste Fälle mit switch#

Entscheidungen und Schleifen · Lektion 19 von 60

Voraussetzungen: if. Lernziel: Du baust eine klare Menüauswahl und vermeidest unbeabsichtigtes Durchfallen.

switch wählt einen Fall anhand eines ganzzahligen oder Aufzählungswerts. Ein Fall heißt im Code case. Ein Aufzählungstyp ordnet benannte mögliche Werte zusammen; enum erklärt ihn später. Strings und Gleitkommazahlen sind keine passenden unmittelbaren switch-Werte.

C++
1#include <iostream>2 3int main() {4    char auswahl{};5    std::cout << "n: neu, h: Hilfe, q: Ende\n";6    if (!(std::cin >> auswahl)) {7        return 1;8    }9    switch (auswahl) {10    case 'n':11        std::cout << "Neuer Eintrag\n";12        break;13    case 'h':14    case '?':15        std::cout << "Waehle n oder q.\n";16        break;17    case 'q':18        return 0;19    default:20        std::cerr << "Unbekannte Auswahl\n";21        return 1;22    }23}

break und default#

break verlässt hier die switch-Anweisung. Es beendet nicht automatisch das Programm. return verlässt dagegen die ganze Funktion. default behandelt den Wert, wenn keiner der benannten Fälle passt. Es ist optional, für Benutzereingaben aber oft sinnvoll.

Mehrere direkt aufeinanderfolgende case-Marken können denselben Code verwenden. Im Beispiel führen 'h' und '?' zur Hilfe. Die Fallwerte müssen geeignete konstante Ausdrücke sein und dürfen sich nicht doppeln.

Fallthrough#

Fallthrough bedeutet, dass die Ausführung nach einem Fall in den folgenden Code weiterläuft. case-Marken stoppen sie nicht von selbst. Vergisst du break, kann ein Menüpunkt deshalb plötzlich mehrere Aktionen ausführen.

Ein absichtlich gewünschtes Durchfallen nach bereits ausgeführten Anweisungen lässt sich seit C++17 mit [[fallthrough]]; markieren. Das ist ein Attribut, eine zusätzliche Information für den Compiler. Es ersetzt kein break, sondern dokumentiert gerade das gewollte Weiterlaufen.

Variablen im Fallblock#

Wenn ein Fall lokale Variablen initialisiert, fasse seinen Inhalt in {} zusammen. Sonst kann eine Fehlermeldung wie jump to case label crosses initialization entstehen: Ein Sprung zu einem anderen Fall würde eine Initialisierung überspringen. Eigene Blöcke begrenzen den Gültigkeitsbereich eindeutig.

Übung#

Warum eignen sich die Bereiche „unter 50“, „50 bis 89“ und „ab 90“ besser für if als für normales switch?

Lösung

case benennt einzelne konstante Werte. Allgemeine Bereichsbedingungen formulierst du direkt mit Vergleichen in if. Compilererweiterungen für Fallbereiche sind kein portables Standard-C++.

Weiterlernen#

Zurück: Entscheidungen mit if und else · Kursübersicht · Weiter: Wiederholungen mit while, do-while und for

Mitwirkende 1

Menschen, deren Änderungen in dieser Seite veröffentlicht wurden.

Kommentare 0

Kommentare sind für diese Seite deaktiviert.