C++ 中的 switch 語句

Suraj P 2023年1月30日 2022年4月20日
  1. C++ 中的 switch-case 語句
  2. 在 C++ 中使用 Switch Case 的規則和屬性
  3. C++ 中 switch 語句和 if-else 語句之間的區別
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 的規則和屬性

  1. switch 語句中使用的表示式應該是 constant value。否則將被視為無效。

    在這裡我們可以看到,只要為它們分配了固定值,就可以使用常量和變數表示式。

    switch(1+2+3*4+5)
    switch(a+b+c*d)
    
  2. defaultbreak 是可選的。即使 switch-case 沒有它們,它也可以毫無問題地執行。

  3. 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
    
  4. switch 語句中使用的表示式必須是整數型別,這意味著它應該是 intcharenum。否則我們會得到一個編譯錯誤。

    #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
```
  1. 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
    
  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
```
  1. 不允許重複的案例標籤。如果給出,我們將得到一個編譯錯誤。

    #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
    
  2. 案例標籤也應該是不變的。否則,我們會得到一個編譯錯誤。

    #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
    
  3. 我們可以對執行相同任務的所有 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 時,switchif-else 更受歡迎,因為它更快。

Author: Suraj P
Suraj P avatar Suraj P avatar

A technophile and a Big Data developer by passion. Loves developing advance C++ and Java applications in free time works as SME at Chegg where I help students with there doubts and assignments in the field of Computer Science.

LinkedIn GitHub

相關文章 - C++ Statement