← 目录 / 第四章 · 分支结构 / 4.2 if 语句

4.2 if 语句

程序并不总是一行一行顺序执行——有时需要根据条件来决定走哪条路。本节学习 if、if-else 和多分支 if-else if-else 链。

if 语句

程序默认是一行一行顺序往下执行的,但很多逻辑需要"看情况"——分数及格才打印"及格",年龄够了才能办卡。if 语句就是让程序具备"看情况做事"能力的关键结构。

4.2.1 if 语句

if 语句仅当条件值为 true 时才执行大括号内的代码块。条件为 false 时直接跳过,程序继续往下走。

if 流程图 开始 条件 表达式 执行语句 结束
C++ · if 语法 & 示例
1// 语法
2if (条件表达式)
3{
4 // 条件为 true 时执行
5}
6
7// 示例
8int score = 85;
9if (score >= 60)
10{
11 cout << "及格了!" << endl;
12}

4.2.2 if-else 语句

当条件不满足时,使用 else 指定另一条路。程序必走其中一条分支,不会两条都走,也不会一条都不走。

if-else 流程图 开始 条件 表达式 语句 1 语句 2 结束
C++ · if-else 示例
1int score = 55;
2if (score >= 60)
3{
4 cout << "及格!" << endl;
5}
6else
7{
8 cout << "不及格,继续努力!" << endl;
9}

4.2.3 多分支 if-else if-else

需要判断多个条件时,可以在 ifelse 之间插入任意个 else if,程序从上到下依次检查,一旦匹配就执行对应块并跳出,最后的 else 兜底。

score ≥ 90? score ≥ 75? score ≥ 60? 优秀 良好 及格 不及格
C++ · 多分支示例(成绩判断)
1int score = 78;
2if (score >= 90)
3{
4 cout << "优秀" << endl;
5}
6else if (score >= 75)
7{
8 cout << "良好" << endl; // score=78,匹配这里 ✓
9}
10else if (score >= 60)
11{
12 cout << "及格" << endl;
13}
14else
15{
16 cout << "不及格" << endl;
17}
📖
顺序很重要:多分支是从上到下依次检查的,一旦某个条件匹配就不再往下看。所以条件范围要按"从严格到宽松"的顺序排列(先判断 ≥90,再判断 ≥75……),如果顺序颠倒(先判断 ≥60),所有分数只要及格就会全部落进第一个分支,后面的判断永远不会被执行到。

4.2.4 省略大括号的陷阱

如果 ifelse 后面只有一条语句,C++ 允许省略大括号 {}

C++ · 省略大括号(仅限单条语句)
1if (score >= 60)
2 cout << "及格"; // 只有一条语句,可以不写 {}
🚫
省略大括号是很多 bug 的源头:看看下面这段代码,缩进看起来"打印两行字"都属于 if,但实际上只有紧跟着的第一条语句才受 if 控制,第二行不管条件是否成立都会执行:
C++ · 缩进骗不了编译器
1int score = 30;
2if (score >= 60)
3 cout << "及格"; // 只有这一行属于 if
4 cout << "恭喜过关!"; // ⚠️ 这行和 if 无关,无论如何都会执行
💡
安全习惯:即使只有一条语句,也始终加上大括号。这样以后想给 if 增加第二条语句时,只需要直接在花括号里添加,不会因为忘记补花括号而引入这类"看起来对、实际上错"的 bug。

4.2.5 嵌套 if 与代码可读性

if 内部还可以再嵌套 if,用来表达"先满足条件 A,再在此基础上判断条件 B"这种层层递进的逻辑:

C++ · 嵌套 if 示例
1int age = 15;
2bool hasTicket = true;
3
4if (age >= 12) // 外层:先判断年龄
5{
6 if (hasTicket) // 内层:年龄够了,再判断是否有票
7 {
8 cout << "可以入场";
9 }
10}

这段逻辑其实也能用 else if 链或者一个 && 条件写出来(if (age >= 12 && hasTicket)),三种写法怎么选,可以参考这个原则:

🧭
嵌套 if vs else-if 链:如果多个条件之间是"平级选项"(选一个走一条路,比如按分数分等级),用 else if 链更清晰;如果条件之间是"层层递进"的关系(必须先满足外层,才有必要判断内层),用嵌套 if 更符合逻辑本身的结构。嵌套层数一旦超过 2~3 层,代码会变得很难读,这时应该考虑用 && 合并条件,或者把内层逻辑提取成一个单独的函数(见后续章节)。

4.2.6 常见陷阱与易错点

把本节内容汇总成几条最容易踩坑的规则:

1
省略大括号只管下一条语句:缩进不代表归属关系,编译器只看有没有大括号。省略大括号时若想追加第二条语句,必须重新补上 {},否则新加的语句会脱离 if 的控制。
2
多分支的判断顺序写反:范围判断必须按"从严格到宽松"排列。如果把最宽松的条件放在最前面,后面更精确的条件将永远没有机会被执行到。
3
该用 else if 却写成了多个独立 if:如果几个条件之间是互斥的(只应该匹配一个),却写成一串独立的 if 而不是 else if,即使前面已经匹配成功,程序仍然会继续检查后面每一个 if,浪费判断次数,某些情况下还可能被多个分支同时命中,产生意料之外的结果。
4
嵌套层数过深:超过 2~3 层嵌套的 if 通常意味着逻辑设计可以优化——尝试用 && 合并条件,或者提前用 if (!条件) continue/return; 排除不满足的情况(提前退出,减少嵌套),让主逻辑保持在同一层级。