📜  如何在 switch 块内但在 case 外处理语句(1)

📅  最后修改于: 2023-12-03 15:08:48.569000             🧑  作者: Mango

如何在 switch 块内但在 case 外处理语句

在 C 或 C++ 中,switch 块内只能包含 case 标签和与之对应的语句,不能直接在 switch 块内定义变量或执行其它语句。但是,有时候我们需要在 switch 块内使用变量或执行其它语句。那么该怎么办呢?

下面介绍几种常见的方法。

1. 使用代码块

可以使用代码块来创建一个作用域,从而在 switch 块内定义变量和执行其它语句。示例如下:

switch (n) {
    case 1: {
        int x = 1;
        // do something with x
        break;
    }
    case 2: {
        int y = 2;
        // do something with y
        break;
    }
    default: {
        // do something else
        break;
    }
}

代码块中定义的变量只在代码块内有效,在代码块外无法访问。

2. 使用 goto 语句

可以使用 goto 语句跳转到一个标签,并在标签后定义变量和执行其它语句。示例如下:

switch (n) {
    case 1: 
        goto label1;
    case 2:
        goto label2;
    default:
        goto label3;
}

label1:
    int x = 1;
    // do something with x
    goto end;

label2:
    int y = 2;
    // do something with y
    goto end;

label3:
    // do something else

end:
    // continue executing after switch block

这种方法使用 goto 语句会使代码变得混乱难懂,不建议使用。

3. 提前声明变量

可以在 switch 块外提前声明变量,并在 switch 块内使用。示例如下:

int x, y;

switch (n) {
    case 1:
        x = 1;
        // do something with x
        break;
    case 2:
        y = 2;
        // do something with y
        break;
    default:
        // do something else
        break;
}

这种方法比较简单易懂,但会使代码变得散乱,不利于维护。

总之,在 switch 块内但在 case 外处理语句的方法有很多,具体采用哪种方法,取决于具体的情况。建议根据实际情况选择合适的方法。