Verwendung der switch-Anweisung in C++

Jinku Hu 12 Oktober 2023
  1. Verwendung der switch-Anweisung zum Konstruieren von Codepfad-Szenarien mit mehreren Fällen
  2. Verwenden Sie das Schlüsselwort default, um einen Standard-Codepfad im switch festzulegen
  3. Verwenden der Blockschreibweise {} zur Deklaration lokaler Variablen in verschiedenen Codepfaden
Verwendung der switch-Anweisung in C++

In diesem Artikel werden verschiedene Methoden zur Verwendung der switch-Anweisung in C++ erläutert.

Verwendung der switch-Anweisung zum Konstruieren von Codepfad-Szenarien mit mehreren Fällen

Das Schlüsselwort switch wird ähnlich wie andere blockbasierte Anweisungen verwendet, die einen bestimmten Ausdruck als Bedingung auswerten. Der einzige Unterschied besteht darin, dass der Ausdruck einen ganzzahligen Wert im Vergleich zu jedem durch die case-Schlüsselwörter angegebenen Codepfad haben muss. Die Pfade haben die folgende Struktur - case label : statements, wobei label der Wert ist, der mit dem Ausdruck in der switch-Bedingung verglichen wird. Wenn der Ausdruck mit einem der Labels übereinstimmt, geht die Programmausführung zu den Anweisungen, die nach diesem Label folgen. Beachten Sie, dass, wenn der case-Block nicht mit der Anweisung break; endet, das Programm weiterhin Anweisungen in allen folgenden case-Blöcken ausführt, bis das break; nicht erreicht wird oder der switch-Bereich selbst beendet wird.

#include <iostream>

using std::cin;
using std::cout;
using std::endl;
using std::string;

enum WEEK { Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, Sunday };

int main() {
  int week_day;

  cout << "Type the weekday (0-6): ";
  cin >> week_day;
  if (cin.fail()) {
    cout << "Error occured when reading from stream!" << endl;
    exit(EXIT_FAILURE);
  };

  switch (week_day) {
    case Monday:
      cout << "Monday\n";
      break;
    case Tuesday:
      cout << "Tuesday\n";
      break;
    case Wednesday:
      cout << "Wednesday\n";
      break;
    case Thursday:
      cout << "Thursday\n";
      break;
    case Friday:
      cout << "Friday\n";
      break;
    case Saturday:
      cout << "Saturday\n";
      break;
    case Sunday:
      cout << "Sunday\n";
      break;
    default:
      exit(EXIT_FAILURE);
  }

  exit(EXIT_SUCCESS);
}

Verwenden Sie das Schlüsselwort default, um einen Standard-Codepfad im switch festzulegen

Das Schlüsselwort default definiert das Label des Spezialfalls, der ausgeführt wird, wenn keiner der deklarierten Fälle auf den switch-Ausdruck passt. Der wichtige Punkt, den Sie beachten müssen, ist, dass jeder Labelblock die Anweisung break; am Ende benötigt, um die grundlegende Logik des switch-Konstrukts zu erfüllen. Beachten Sie, dass das nächste Codebeispiel die switch-Anweisung ohne Pausen demonstriert, die sich ziemlich abrupt verhalten wird. Wenn der Wert von week_day mit dem ersten Label Monday übereinstimmt, dann wird jede cout-Anweisung ausgeführt, auch die neben dem Standard-Label. Wenn der Wert von week_day hingegen mit keinem Case-Label übereinstimmt, dann werden die cout-Anweisungen ab dem Label default ausgeführt.

#include <iostream>

using std::cin;
using std::cout;
using std::endl;
using std::string;

enum WEEK { Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, Sunday };

int main() {
  int week_day;

  cout << "Type the weekday (0-6): ";
  cin >> week_day;
  if (cin.fail()) {
    cout << "Error occured when reading from stream!" << endl;
    exit(EXIT_FAILURE);
  };

  switch (week_day) {
    case Monday:
      cout << "Monday\n";
    case Tuesday:
      cout << "Tuesday\n";
    case Wednesday:
      cout << "Wednesday\n";
    case Thursday:
      cout << "Thursday\n";
    case Friday:
      cout << "Friday\n";
    default:
      cout << "Wrong number specified!\n";
    case Saturday:
      cout << "Saturday\n";
    case Sunday:
      cout << "Sunday\n";
  }

  exit(EXIT_SUCCESS);
}

Verwenden der Blockschreibweise {} zur Deklaration lokaler Variablen in verschiedenen Codepfaden

Wie andere blockbasierte Anweisungen hat der switch-Körper den Bereich, in dem Variablen deklariert werden können, aber in jedem case-Konstrukt müssen lokale Variablen vorhanden sein. Beachten Sie, dass Anweisungen aus jedem case-Pfad einen gemeinsamen Geltungsbereich haben, es sei denn, sie werden innerhalb eines separaten Blocks innerhalb von {} deklariert. Wenn also eine Variable in einem case initialisiert wird, können sich die Anweisungen in anderen Cases nicht auf dieselbe Variable beziehen. Das folgende Beispiel implementiert die Anweisung switch, wobei es einen lokalen Block für den case Friday gibt und die Variable darin von anderen case nicht gesehen wird.

#include <iostream>

using std::cin;
using std::cout;
using std::endl;
using std::string;

enum WEEK { Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, Sunday };

int main() {
  int week_day;

  cout << "Type the weekday (0-6): ";
  cin >> week_day;
  if (cin.fail()) {
    cout << "Error occured when reading from stream!" << endl;
    exit(EXIT_FAILURE);
  };

  switch (week_day) {
    case Monday:
      cout << "Monday\n";
      break;
    case Tuesday:
      cout << "Tuesday\n";
      break;
    case Wednesday:
      cout << "Wednesday\n";
      break;
    case Thursday:
      cout << "Thursday\n";
      break;
    case Friday: {
      string str = "Friday";
      cout << str << endl;
      break;
    }
    case Saturday:
      cout << "Saturday\n";
      break;
    case Sunday:
      cout << "Sunday\n";
      break;
    default:
      exit(EXIT_FAILURE);
  }

  exit(EXIT_SUCCESS);
}
Autor: Jinku Hu
Jinku Hu avatar Jinku Hu avatar

Founder of DelftStack.com. Jinku has worked in the robotics and automotive industries for over 8 years. He sharpened his coding skills when he needed to do the automatic testing, data collection from remote servers and report creation from the endurance test. He is from an electrical/electronics engineering background but has expanded his interest to embedded electronics, embedded programming and front-/back-end programming.

LinkedIn Facebook