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 多选一
?: 三元条件表达式

注意事项 #

  1. 始终使用花括号
  2. 注意悬挂else问题
  3. 区分 ===
  4. 浮点数比较使用误差范围
  5. 避免深层嵌套

下一步,让我们学习switch语句!

最后更新:2026-03-26