3.1 判断语句

本篇学习 `if`、`else if`、`else` 与 `switch` 的使用方式,并能根据条件和离散值组织分支逻辑。

判断语句

概念说明

判断语句用于根据条件不同执行不同分支。 在 C 语言里,最常见的条件分支写法是 if 系列和 switch

这两种写法解决的是不同问题:

  • if 更适合范围判断、组合条件和布尔表达式。
  • switch 更适合“某个表达式等于哪一个离散常量值”的场景。

分支写得清不清楚,往往比“能不能跑”更重要。 同样的逻辑,如果选择了更贴切的分支形式,后续维护会轻松很多。

语法/规则

  1. if 条件表达式的结果为 0 时表示假,非 0 时表示真。
  2. else if 会按书写顺序依次判断,命中后后续分支不会再执行。
  3. switch 适合判断整数、字符或枚举这类离散值,不适合范围判断。
  4. case 后面必须是编译期可确定的常量表达式。
  5. switch 中如果不写 break,程序会继续向下执行后续 case,这叫贯穿或落空。
  6. default 不是必须写,但在分支不完整时通常建议保留。
  7. 对于复杂条件,与其追求一行写完,不如用括号和局部变量把意图写清楚。

示例

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
#include <stdio.h>

int main(void) {
    int score = 86;
    int day = 3;

    if (score >= 90) {
        printf("grade = A\n");
    } else if (score >= 80) {
        printf("grade = B\n");
    } else {
        printf("grade = C\n");
    }

    switch (day) {
        case 1:
            printf("day = Monday\n");
            break;
        case 2:
            printf("day = Tuesday\n");
            break;
        case 3:
            printf("day = Wednesday\n");
            break;
        default:
            printf("day = Unknown\n");
            break;
    }

    return 0;
}

输出结果:

1
2
grade = B
day = Wednesday

常见错误

  1. 在判断里把 == 错写成 =,结果条件表达式被赋值而不是比较。
  2. switch 分支漏写 break,导致程序继续落入后续分支。
  3. switch 去写区间判断,结果代码越来越绕,还不如直接使用 if
  4. 花括号省略过多,后续改动时很容易出现“实际只控制了一条语句”的问题。
  5. 条件表达式写得过于复杂,自己一个月后都看不懂原来想表达什么。
本文禁止转载
使用 Hugo 构建
主题 StackJimmy 设计 由 Hobin 魔改
最近构建时间:2026-04-17 19:07:48 CST
载入天数...载入时分秒...
发表了 1 篇文章 · 发表了 152 篇笔记 · 总计 18 万 0 千字