C++ 中的 switch 語句
在本文中,我們將瞭解 C++ 中的 switch
語句及其特殊屬性。
C++ 中的 switch-case
語句
switch-case
根據其值評估表示式,並針對 case
語句中存在的常量值列表進行測試,以根據不同的 case
執行不同的操作。
與 if-else
一樣,switch 語句是控制流語句,因為它們可以改變程式的一般流程,因為它允許表示式或變數通過 多路分支
控制流程。
語法:
switch(variable / expression)
{
case constant-expression 1:
statements;
case constant-expression 2:
statements;
}
示例程式碼:
#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";
}
}
輸出:
Wednesday
Thursday
Friday
Saturday
Sunday
變數 day = 3
的值被評估並與相應的 case 語句 case 3
匹配,並且它包含的語句"Wednesday"
被列印,但我們仍然得到剩餘的字串,因為一旦控制轉到 case 3
,從那裡到 switch 塊結束的所有內容,所有語句都被列印/評估。
這就是為什麼要列印來自 cases
4,5,6,7 的語句的原因。
為了避免這種情況,我們必須修改我們的 switch-case
結構。
語法 - 修改 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;
}
break
關鍵字用於停止 switch 塊的執行並退出它。一旦條件/案例匹配,我們評估語句,中斷流程,並從 switch 塊中出來。
default
關鍵字指定在沒有大小寫匹配時執行的語句。
示例程式碼:
#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;
}
}
輸出:
Wednesday
在下一個示例中,我們還可以使用 char
進行切換。我們將看到一個檢查字元是母音還是子音的示例程式碼。
示例程式碼:
#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;
}
}
輸出:
Vowel
在 C++ 中使用 Switch Case 的規則和屬性
-
switch
語句中使用的表示式應該是constant value
。否則將被視為無效。在這裡我們可以看到,只要為它們分配了固定值,就可以使用常量和變數表示式。
switch(1+2+3*4+5) switch(a+b+c*d)
-
default
和break
是可選的。即使switch-case
沒有它們,它也可以毫無問題地執行。 -
switch
語句的巢狀是有效的,意味著我們可以在另一個語句中切換語句。雖然這不是一個好的程式設計習慣,但我們仍然可以利用它們。#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; } }
輸出:
checking info...... Login successful
-
switch
語句中使用的表示式必須是整數型別,這意味著它應該是int
、char
或enum
。否則我們會得到一個編譯錯誤。#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; } }
輸出:
```text
[Error] switch quantity not an integer
```
-
default
塊可以在switch
內,但僅在沒有匹配的情況下執行。#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; } }
輸出:
It's not 1 or 2
-
case 上面寫的語句永遠不會執行。一旦
switch
語句被評估,控制轉移到匹配的情況或default
塊(如果存在)。#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; } }
輸出:
```text
It's not 1 or 2
```
-
不允許重複的案例標籤。如果給出,我們將得到一個編譯錯誤。
#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; } }
輸出:
[Error] duplicate case value
-
案例標籤也應該是不變的。否則,我們會得到一個編譯錯誤。
#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; } }
輸出:
[Error] the value of 'arr' is not usable in a constant expression
-
我們可以對執行相同任務的所有
case
語句進行分組。#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"; } }
C++ 中 switch
語句和 if-else
語句之間的區別
當我們有許多 if-else
語句時,編譯器必須檢查所有語句,直到找到有效匹配。而在 switch-case
中,如果我們只想執行某個程式碼塊,並且滿足某個條件,則使用語句。
以下示例檢查字元是否為字母表。
示例程式碼:
char x = '+';
if (x == 'A')
....
else if (x == 'B')...
else if (x == 'C')...
....else cout
<< "Not an alphabet"
由於+
不是字母表,到達最後一個需要更長的時間,因為它必須首先檢查每個先前的條件。如果使用 switch-case
實現,當案例/條件的數量非常大時,它會使用查詢表或雜湊列表。
這意味著所有專案都獲得相同的訪問時間。所以,當我們有很多 cases/conditions
時,switch
比 if-else
更受歡迎,因為它更快。