Die switch-Anweisungen in C++
-
die
switch-case
-Anweisung in C++ - Regeln und Eigenschaften bei der Verwendung von Switch Case in C++
-
Unterschied zwischen
switch
-Anweisungen undif-else
-Anweisungen in C++
In diesem Artikel lernen wir switch
-Anweisungen in C++ und ihre speziellen Eigenschaften kennen.
die switch-case
-Anweisung in C++
Der switch-case
wertet den Ausdruck basierend auf seinem Wert aus und wird anhand einer Liste von konstanten Werten getestet, die in case
-Anweisungen vorhanden sind, um verschiedene Aktionen basierend auf verschiedenen cases
auszuführen.
Switch-Anweisungen sind wie if-else
Kontrollflussanweisungen, weil sie den allgemeinen Ablauf eines Programms verändern können, weil sie einem Ausdruck oder einer Variablen erlauben, den Fluss über eine Mehrfachverzweigung
zu steuern.
Syntax:
switch(variable / expression)
{
case constant-expression 1:
statements;
case constant-expression 2:
statements;
}
Beispielcode:
#include <iostream>
using namespace std;
int main() {
int day = 3;
switch (day) {
case 1:
cout << "Monday\n";
case 2:
cout << "Tuesday\n";
case 3:
cout << "Wednesday\n";
case 4:
cout << "Thursday\n";
case 5:
cout << "Friday\n";
case 6:
cout << "Saturday\n";
case 7:
cout << "Sunday\n";
}
}
Ausgabe:
Wednesday
Thursday
Friday
Saturday
Sunday
Der Wert der Variablen day = 3
wird ausgewertet und mit der entsprechenden Case-Anweisung case 3
abgeglichen, und die darin enthaltene Aussage "Wednesday"
wird ausgegeben, aber wir erhalten immer noch die restlichen Zeichenfolgen, weil einmal die Steuerung geht zu case 3
, ab da alles bis zum Ende des Schalterblocks, alle Anweisungen werden gedruckt/ausgewertet.
Deshalb werden die Aussagen aus Fälle
4,5,6,7 abgedruckt.
Um dies zu vermeiden, müssen wir unsere switch-case
-Struktur ändern.
Syntax - Modifiziertes switch-case
:
switch(variable / expression)
{
case constant-expression 1:
statements;
break; (optional)
case constant-expression 2:
statements;
break; (optional)
default: //default statment optional
statements;
break;
}
Das Schlüsselwort break
wird verwendet, um die Ausführung des switch-Blocks zu stoppen und ihn zu verlassen. Sobald die Bedingung/der Fall zutrifft, werten wir die Anweisungen aus, unterbrechen den Fluss und verlassen den Switch-Block.
Das Schlüsselwort default
gibt Anweisungen an, die ausgeführt werden, wenn kein Fall zutrifft.
Beispielcode:
#include <iostream>
using namespace std;
int main() {
int day = 3;
switch (day) {
case 1:
cout << "Monday\n";
break;
case 2:
cout << "Tuesday\n";
break;
case 3:
cout << "Wednesday\n";
break;
case 4:
cout << "Thursday\n";
break;
case 5:
cout << "Friday\n";
break;
case 6:
cout << "Saturday\n";
break;
case 7:
cout << "Sunday\n";
break;
default:
cout << "Wrong option entereted\n";
break;
}
}
Ausgabe:
Wednesday
In diesem nächsten Beispiel können wir auch mit char
umschalten. Wir sehen einen Beispielcode, der prüft, ob ein Zeichen ein Vokal oder ein Konsonant ist.
Beispielcode:
#include <iostream>
using namespace std;
int main() {
char x = 'u';
switch (x) {
case 'a':
cout << "Vowel";
break;
case 'e':
cout << "Vowel";
break;
case 'i':
cout << "Vowel";
break;
case 'o':
cout << "Vowel";
break;
case 'u':
cout << "Vowel";
break;
default:
cout << "Consonant";
break;
}
}
Ausgabe:
Vowel
Regeln und Eigenschaften bei der Verwendung von Switch Case in C++
-
Der innerhalb der
switch
-Anweisung verwendete Ausdruck sollte einkonstanter Wert
sein. Andernfalls wird es als ungültig betrachtet.Hier sehen wir, dass konstante und variable Ausdrücke, sofern sie mit festen Werten belegt sind, verwendet werden können.
switch (1 + 2 + 3 * 4 + 5) switch (a + b + c * d)
-
default
undbreak
sind optional. Auch wenn dasswitch-case
diese nicht hat, läuft es problemlos. -
Das Verschachteln von
switch
-Anweisungen ist gültig, was bedeutet, dass wir Anweisungen innerhalb einer anderen tauschen können. Obwohl es keine gute Programmierpraxis ist, können wir sie dennoch verwenden.#include <iostream> using namespace std; int main() { int ID = 1234; int password = 000; switch (ID) { case 1234: cout << "checking info......\n"; switch (password) { case 000: cout << "Login successful\n"; break; default: cout << "Password don't match please check it\n"; break; } break; default: printf("incorrect ID"); break; } }
Ausgabe:
checking info...... Login successful
-
Der in der
switch
-Anweisung verwendete Ausdruck muss ein ganzzahliger Typ sein, d. h. er sollteint
,char
oderenum
sein. Andernfalls erhalten wir einen Kompilierungsfehler.#include <iostream> using namespace std; int main() { float x = 12.34; switch (x) { case 1.1: cout << "Yes"; break; case 12.34: cout << "NO"; break; } }
Ausgabe:
[Error] switch quantity not an integer
-
Der
default
-Block kann sich innerhalb desswitch
befinden, aber nur ausgeführt werden, wenn keine Fälle übereinstimmen.#include <iostream> using namespace std; int main() { int x = 45; switch (x) { default: cout << "It's not 1 or 2"; break; case 1: cout << "It's a 1"; break; case 2: cout << "It's a 2"; break; } }
Ausgabe:
It's not 1 or 2
-
Die über dem Fall geschriebenen Aussagen werden niemals ausgeführt. Sobald die
switch
-Anweisung ausgewertet ist, wechselt die Steuerung entweder zum übereinstimmenden Fall oder zumdefault
-Block, falls vorhanden.#include <iostream> using namespace std; int main() { int x = 45; switch (x) { cout << "Tony is Iron Man\n"; case 1: cout << "It's a 1"; break; case 2: cout << "It's a 2"; break; default: cout << "It's not 1 or 2"; break; } }
Ausgabe:
It's not 1 or 2
-
Doppelte Kartonetiketten sind nicht erlaubt. Wenn angegeben, erhalten wir einen Kompilierungsfehler.
#include <iostream> using namespace std; int main() { int x = 45; switch (x) { case 45: cout << "Iron Man"; break; case 40 + 5: cout << "tony stark"; break; default: cout << "It's not 1 or 2"; break; } }
Ausgabe:
[Error] duplicate case value
-
Die Fallbezeichnungen sollten ebenfalls konstant sein. Andernfalls erhalten wir einen Kompilierfehler.
#include <iostream> using namespace std; int main() { int x = 2; int arr[] = {100, 200, 300}; switch (x) { case arr[0]: cout << "Iron Man"; break; case arr[1]: cout << "tony stark"; break; case arr[2]: cout << "It's not 1 or 2"; break; } }
Ausgabe:
[Error] the value of 'arr' is not usable in a constant expression
-
Wir können alle
case
-Anweisungen gruppieren, die dieselbe Aufgabe erfüllen.#include <iostream> using namespace std; int main() { char x = 'A'; switch (x) { case 'a': case 'e': case 'i': case 'o': case 'u': case 'A': case 'E': case 'I': case 'O': case 'U': cout << "Vowel"; break; default: cout << "consonant"; } }
Unterschied zwischen switch
-Anweisungen und if-else
-Anweisungen in C++
Wenn wir viele if-else
-Anweisungen haben, muss der Compiler alle prüfen, bis eine gültige Übereinstimmung gefunden wird. Während in switch-case
Anweisungen verwendet werden, wenn ein bestimmter Codeblock nur ausgeführt werden soll, wenn eine bestimmte Bedingung erfüllt ist.
Das folgende Beispiel prüft ein Zeichen, ob es ein Alphabet ist oder nicht.
Beispielcode:
char x = '+';
if (x == 'A')
....
else if (x == 'B')...
else if (x == 'C')...
....else cout
<< "Not an alphabet"
Da +
kein Alphabet ist, dauert es viel länger, das letzte zu erreichen, weil es zuerst jede vorherige Bedingung prüfen muss. Wenn es mit switch-case
implementiert wird, verwendet es eine Lookup-Tabelle oder eine Hash-Liste, wenn die Anzahl der Fälle/Bedingungen sehr groß ist.
Das bedeutet, dass alle Artikel die gleiche Zugriffszeit erhalten. Wenn wir also viele Fälle/Bedingungen
haben, wird switch
gegenüber if-else
bevorzugt, da es schneller ist.