跳转至

5. 选择结构

5.1 语句、复合语句和作用域

表达式后面加分号就是一条语句;单独一个分号则是空语句。花括号把若干声明和语句包成一个复合语句,同时也划出一层新的作用域。

if (condition);     /* 这个分号是空语句 */
{
    work();         /* 无论条件真假都会执行 */
}

5.2 ifif ... else

if (score >= 60) {
    puts("pass");
} else {
    puts("fail");
}

没有花括号时,else 会找离它最近、还没配对的 if。缩进不参与语法判断,不能只看代码排得像不像一组。

多分支一般串成 if - else if - else。判断成绩等级时要从高分往低分写;如果第一句就是 score >= 60,后面的 80、90 分分支永远走不到。

5.3 条件运算符

条件运算符适合二选一地取一个值:

max = a > b ? a : b;

分支里要做很多事时,直接写 if,不必硬塞成一行。

5.4 switch

switch (op) {
case '+':
    result = a + b;
    break;
case '-':
    result = a - b;
    break;
default:
    puts("unknown operator");
    break;
}

switch 只能按整数或枚举值分支,case 后面也必须是互不重复的整型常量。看到 case 时顺手检查 break:没有它,程序会从匹配处一直往下跑。确实想让两个分支共用代码时可以故意不写,但最好留一句注释。

评论