C++中,switch 语句是一种多分支控制结构,用于根据一个变量的值选择执行的代码分支。switch 语句主要用于对整数、字符或枚举类型的变量进行条件判断。它的结构简洁、易读,适合在多条件判断中使用。相比 if else 语句,switch case 语句在处理多个条件分支时,通常具有更清晰、更简洁的语法。

1、switch 语句

使用switch语句选择要执行的许多代码块之一。

语法

switch(expression) {
  case x:
    // 代码块
    break;
  case y:
    // 代码块
    break;
  default:
    // 代码块
}

switch case 语句有如下规则:

1)switch语句中使用的表达式必须具是intenum类型,否则如float等其他数据类型是无法通过的编译的,因为编译器需要switch后面的语句和case后面的值精确匹配,而计算机无法精确表达一个float数据类型。

2)switch可以任意个case语句(包括没有), 值和语句之间使用:分隔。

3)case后面的值必须是int常量值,或者返回结果为int类型的表达式,以下代码无法编译通过。

4)当switch后面的变量值和case后面的常量值匹配相等后,case后面的代码将会被执行,直到break语句被执行后跳出switch代码块

5)break不是必须的,如果没有break,则执行完当前case的代码块后会继续执行后面case代码块的内容,直到执行break才可以退出

6)switch有一个默认的情况,我们用default关键词表示,当switch后面的变量和所有case后面的常量都不匹配的情况下,默认执行default后面的语句

例如:

#include <iostream>
using namespace std;
int main() {

    cout << "Please input a number(1-100):" << endl;
    int grade;
    cin >> grade;

    switch (grade / 10) {
        case 10:
        case 9:
            cout << "A\n";
            break;

        case 8:
        case 7:
            cout << "B\n";
            break;

        case 6:
        case 5:
            cout << "C\n";
            break;
        default:
            cout << "default\n";
            break;

    }
    return 0;
}

2、break关键字

当C++代码执行到break关键字时,它将跳出switch块。

#include <iostream>
using namespace std;
int main() 
{
  char c='\0';
  for(int i=1;i<=4;i++){
   switch(i){
       case 1:c='J';
       cout << c;
       //break;
       case 2:c='e';
       cout << c;
       break;
       case 3:c='p';
       cout << c;
       //break;
       cout << "好\n";//不匹配都会执行
   }   
  }
/*当i=1时运行结果是 Je  当i=2时 运行结果是 e  当i是3是运行结果是 p 好
    当i是4时运行结果是好*/  
}

注意: continue 不能用于switch语句

3、default关键字

default关键字指定在没有case 匹配的情况下要运行的一些代码:

例如:

#include<iostream>
using namespace std;

int main() {
    int day = 4;
    switch (day) {
      case 6:
        cout << "学习python\n";
        break;
      case 7:
        cout << "学习java\n";
        break;
      default:
        cout << "cjavapy\n";
    }
    // 输出 "cjavapy"
  return 0;
}

注意:如果default语句用作switch块中的最后一条语句,则不需要break

4、贯穿现象(Fall-through)

C++中,如果在 case 语句中省略 break,那么代码会继续执行后续的 case 语句。这被称为贯穿,通常用于多个 case 执行相同代码的情况。

#include <iostream>
using namespace std;

int main() {
    char grade = 'B';

    switch (grade) {
        case 'A':
        case 'B':
        case 'C':
            cout << "Passed" << endl;
            break;
        case 'D':
        case 'F':
            cout << "Failed" << endl;
            break;
        default:
            cout << "Invalid grade" << endl;
            break;
    }
    return 0;
}

5、嵌套 switch 语句

可以在 switch 语句中嵌套另一个 switch 语句,但要注意代码的可读性和逻辑复杂度。

#include <iostream>
using namespace std;

int main() {
    int category = 1;
    int item = 2;

    switch (category) {
        case 1:
            cout << "Category 1 selected" << endl;
            switch (item) {
                case 1:
                    cout << "Item 1 in category 1" << endl;
                    break;
                case 2:
                    cout << "Item 2 in category 1" << endl;
                    break;
                default:
                    cout << "Unknown item in category 1" << endl;
                    break;
            }
            break;
        case 2:
            cout << "Category 2 selected" << endl;
            break;
        default:
            cout << "Unknown category" << endl;
            break;
    }
    return 0;
}

推荐文档