Verwendung der switch-Anweisung in C++
-
Verwendung der
switch
-Anweisung zum Konstruieren von Codepfad-Szenarien mit mehreren Fällen -
Verwenden Sie das Schlüsselwort
default
, um einen Standard-Codepfad imswitch
festzulegen -
Verwenden der Blockschreibweise
{}
zur Deklaration lokaler Variablen in verschiedenen Codepfaden
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);
}
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