Skip to content

初学C容易踩的坑

约 291 字小于 1 分钟

C

2025-09-16

switch 子句

错误案例

    switch (operator)
    {
    case '+':
        res = add(a, b);

    case '-':
        res = minus(a, b);

    case '*':
        res = multiply(a, b);

    case '/':
        res = multiply(a, reciprocal(b));
    }

警告

上面的代码不能正确运行。为什么?

答:需要在每一个 case 子句末尾加上 break; 命令。

提示

在 C 语言中, switch 有一个极其 *仙舟粗口* 的设计,那就是 贯穿(fallthrough),指的是 在 case 子句中一旦匹配到第一个匹配的条件,就会把后续所有 case 子句全部执行,直到遇到 break; 或者 大括号(})。

因此,在多数情况下(不需要贯穿机制的情况下),每一个 case 子句末尾都必须加入 break; 才能保证代码行为符合预期。

正解

    switch (operator)
    {
    case '+':
        res = add(a, b);
        break;

    case '-':
        res = minus(a, b);
        break;

    case '*':
        res = multiply(a, b);
        break;

    case '/':
        res = multiply(a, reciprocal(b));
        break;
    }

scanf() 函数

int a, b, c;
scanf("%d%d%d", a, b, c);

警告

上面的代码不能正确运行。为什么?

。。。因为 scanf() 需要的是变量的引用。就是加了 & 的变量。

正解

int a, b, c;
scanf("%d%d%d", &a, &b, &c);

更新日志

2025/9/17 09:42
查看所有更新日志
  • e0006-docs: update