Skip to content

switch 语句 #18

@lexiaox

Description

@lexiaox

在C语言中,case语句是switch语句的核心组成部分,用于根据表达式的值执行对应的代码块。以下是详细用法和注意事项:

1. 基本结构

cswitch (表达式) {
    case 常量1:
        // 代码块1
        break;
    case 常量2:
        // 代码块2
        break;
    ...
    default:
        // 默认代码块
}
  • 表达式:必须是整型(intchar枚举类型)或字符型,不能是浮点数。
  • case常量:必须是整型或字符型的常量表达式(如1'A'10+5),不能是变量或浮点数。
  • default:可选,当所有case不匹配时执行,可放在任意位置(通常放最后)。

2. 执行流程

  • 计算switch后的表达式值。
  • 依次匹配case后的常量:
    • 若匹配成功,从该case开始执行,直到遇到breakswitch结束。
    • 若未匹配任何case,执行default块(如果存在)。
  • 关键点:若缺少break,会发生“case穿透”(执行后续所有case的代码,直到遇到break或结束)。

3. 代码示例

c#include <stdio.h>
int main() {
    int num = 2;
    switch (num) {
        case 1:
            printf("One\n");
            break;
        case 2:
            printf("Two\n");  // 匹配成功,执行此块
            // 注意:此处若省略break,会继续执行case 3的代码!
        case 3:
            printf("Three\n");  // 若case 2无break,此处也会执行
            break;
        default:
            printf("Default\n");
    }
    return 0;
}

输出

Two
Three

4. 与if-else的对比

  • switch:适合多分支固定值判断,代码更清晰(尤其是分支较多时)。
  • if-else:适合范围判断或复杂条件(如x > 5 && x < 10)。

5. 常见错误

  • 忘记break:导致意外穿透,逻辑错误。
  • case常量非法:如使用变量、浮点数或重复值。
  • 变量作用域问题:在case中直接定义变量(需用{}包裹)。
  • 忽略default:可能导致未处理的情况被遗漏。

通过合理使用switchcase,可以编写出更清晰、高效的条件分支代码,但需特别注意break和常量规则,避免潜在错误。

Metadata

Metadata

Assignees

No one assigned

    Labels

    documentationImprovements or additions to documentation

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions