C++条件语句 #
一、if语句 #
1.1 基本语法 #
cpp
if (condition) {
// 条件为真时执行
}
1.2 基本使用 #
cpp
int age = 20;
if (age >= 18) {
std::cout << "成年人" << std::endl;
}
1.3 单语句省略花括号 #
cpp
// 可以省略花括号(不推荐)
if (age >= 18)
std::cout << "成年人" << std::endl;
// 推荐:始终使用花括号
if (age >= 18) {
std::cout << "成年人" << std::endl;
}
二、if-else语句 #
2.1 基本语法 #
cpp
if (condition) {
// 条件为真时执行
} else {
// 条件为假时执行
}
2.2 基本使用 #
cpp
int score = 55;
if (score >= 60) {
std::cout << "及格" << std::endl;
} else {
std::cout << "不及格" << std::endl;
}
2.3 奇偶判断 #
cpp
int n = 7;
if (n % 2 == 0) {
std::cout << "偶数" << std::endl;
} else {
std::cout << "奇数" << std::endl;
}
三、if-else if-else语句 #
3.1 基本语法 #
cpp
if (condition1) {
// 条件1为真
} else if (condition2) {
// 条件2为真
} else {
// 所有条件都为假
}
3.2 成绩等级 #
cpp
int score = 85;
if (score >= 90) {
std::cout << "优秀" << std::endl;
} else if (score >= 80) {
std::cout << "良好" << std::endl;
} else if (score >= 70) {
std::cout << "中等" << std::endl;
} else if (score >= 60) {
std::cout << "及格" << std::endl;
} else {
std::cout << "不及格" << std::endl;
}
3.3 星期几 #
cpp
int day = 3;
if (day == 1) {
std::cout << "星期一" << std::endl;
} else if (day == 2) {
std::cout << "星期二" << std::endl;
} else if (day == 3) {
std::cout << "星期三" << std::endl;
} else if (day == 4) {
std::cout << "星期四" << std::endl;
} else if (day == 5) {
std::cout << "星期五" << std::endl;
} else if (day == 6) {
std::cout << "星期六" << std::endl;
} else if (day == 7) {
std::cout << "星期日" << std::endl;
} else {
std::cout << "无效日期" << std::endl;
}
四、嵌套if语句 #
4.1 基本使用 #
cpp
int age = 25;
bool hasLicense = true;
if (age >= 18) {
if (hasLicense) {
std::cout << "可以开车" << std::endl;
} else {
std::cout << "需要考取驾照" << std::endl;
}
} else {
std::cout << "年龄不够" << std::endl;
}
4.2 使用逻辑运算符简化 #
cpp
// 嵌套if
if (age >= 18) {
if (hasLicense) {
std::cout << "可以开车" << std::endl;
}
}
// 简化为
if (age >= 18 && hasLicense) {
std::cout << "可以开车" << std::endl;
}
4.3 三角形类型判断 #
cpp
int a = 3, b = 4, c = 5;
if (a + b > c && a + c > b && b + c > a) {
if (a == b && b == c) {
std::cout << "等边三角形" << std::endl;
} else if (a == b || b == c || a == c) {
std::cout << "等腰三角形" << std::endl;
} else if (a * a + b * b == c * c ||
a * a + c * c == b * b ||
b * b + c * c == a * a) {
std::cout << "直角三角形" << std::endl;
} else {
std::cout << "普通三角形" << std::endl;
}
} else {
std::cout << "不能构成三角形" << std::endl;
}
五、条件中的变量声明 #
5.1 C++17 if初始化 #
cpp
// C++17:在if条件中声明变量
if (int x = getValue(); x > 0) {
std::cout << "正数: " << x << std::endl;
} else {
std::cout << "非正数: " << x << std::endl;
}
// x在这里不可见
// 传统写法
{
int x = getValue();
if (x > 0) {
std::cout << "正数: " << x << std::endl;
}
}
5.2 指针检查 #
cpp
Widget* widget = getWidget();
// 传统写法
if (widget != nullptr) {
widget->doSomething();
}
// C++17写法
if (auto w = getWidget(); w != nullptr) {
w->doSomething();
}
六、条件表达式(三元运算符) #
6.1 基本语法 #
cpp
condition ? value_if_true : value_if_false
6.2 基本使用 #
cpp
int x = 10;
int y = 20;
// 取最大值
int max = (x > y) ? x : y;
// 取绝对值
int abs = (x >= 0) ? x : -x;
// 输出
std::cout << ((x > 0) ? "正数" : "非正数") << std::endl;
6.3 嵌套三元运算符 #
cpp
int score = 85;
std::string result = (score >= 90) ? "优秀" :
(score >= 60) ? "及格" : "不及格";
6.4 三元运算符 vs if-else #
cpp
// if-else
std::string result;
if (score >= 60) {
result = "及格";
} else {
result = "不及格";
}
// 三元运算符
std::string result = (score >= 60) ? "及格" : "不及格";
七、常见错误 #
7.1 悬挂else #
cpp
int x = 5, y = 10;
// 错误:else与最近的if匹配
if (x > 0)
if (y > 0)
std::cout << "x和y都大于0" << std::endl;
else
std::cout << "x不大于0" << std::endl; // 这个else属于内层if!
// 正确:使用花括号
if (x > 0) {
if (y > 0) {
std::cout << "x和y都大于0" << std::endl;
}
} else {
std::cout << "x不大于0" << std::endl;
}
7.2 赋值与比较混淆 #
cpp
int x = 5;
// 错误:使用赋值运算符
if (x = 10) { // x被赋值为10,条件为true
// ...
}
// 正确:使用比较运算符
if (x == 10) {
// ...
}
7.3 浮点数比较 #
cpp
double x = 0.1 + 0.2;
// 错误:直接比较浮点数
if (x == 0.3) { // 可能为false
// ...
}
// 正确:使用误差范围
if (std::abs(x - 0.3) < 1e-9) {
// ...
}
八、最佳实践 #
8.1 始终使用花括号 #
cpp
// 不推荐
if (x > 0)
doSomething();
// 推荐
if (x > 0) {
doSomething();
}
8.2 提前返回 #
cpp
// 不推荐:深层嵌套
void process(int x) {
if (x > 0) {
if (x < 100) {
if (x % 2 == 0) {
// 处理
}
}
}
}
// 推荐:提前返回
void process(int x) {
if (x <= 0) return;
if (x >= 100) return;
if (x % 2 != 0) return;
// 处理
}
8.3 使用有意义的条件 #
cpp
// 不推荐
if (x >= 18 && x <= 65) {
// ...
}
// 推荐
bool isWorkingAge = (x >= 18 && x <= 65);
if (isWorkingAge) {
// ...
}
8.4 避免复杂条件 #
cpp
// 不推荐
if ((a > 0 && b > 0) || (c > 0 && d > 0) || e > 0) {
// ...
}
// 推荐:分解条件
bool condition1 = a > 0 && b > 0;
bool condition2 = c > 0 && d > 0;
bool condition3 = e > 0;
if (condition1 || condition2 || condition3) {
// ...
}
九、总结 #
条件语句一览 #
| 语句 | 说明 |
|---|---|
if |
单条件判断 |
if-else |
二选一 |
if-else if-else |
多选一 |
?: |
三元条件表达式 |
注意事项 #
- 始终使用花括号
- 注意悬挂else问题
- 区分
=和== - 浮点数比较使用误差范围
- 避免深层嵌套
下一步,让我们学习switch语句!
最后更新:2026-03-26