Z
ZHANK
控制流程

条件判断 if-else

if/else if/else 分支、嵌套条件、条件运算符的陷阱

条件判断 if-else

if-else 是 C 语言最基础的决策结构。注意别把 == 写成 =——这是 C 语言"入门级坑王"。

学完本章你将: 掌握 if/else if/else、嵌套条件、三目运算符、= vs == 陷阱。


基本语法

c
#include <stdio.h>

int main() {
    int score = 85;

    if (score >= 90) {
        printf("优秀\n");
    } else if (score >= 80) {
        printf("良好\n");        // 输出这句
    } else if (score >= 60) {
        printf("及格\n");
    } else {
        printf("不及格\n");
    }

    return 0;
}

条件表达式本质

在 C 中,0 为假,非 0 为真

c
if (0)   printf("不会执行\n");
if (42)  printf("会执行——非零即真\n");
if ('A') printf("'A' 的 ASCII 是 65,也是真\n");

// 因此可以直接判断指针
int *p = malloc(sizeof(int));
if (p) { /* p 不是 NULL,可以用 */ }

`=` 和 `==` 的坑

c
int x = 0;

// ❌ 经典错误:把 == 写成了 =
if (x = 5) {
    printf("x 被赋值为 5,条件为真\n");  // 总会执行!
}

// ✅ 正确写法
if (x == 5) { }                          // 比较

// 💡 防御技巧:常量放左边
if (5 == x) { }  // 如果写成 5 = x 会编译报错,马上能发现

三目运算符

c
// 一行搞定简单的 if-else
int a = 10, b = 20;
int max = (a > b) ? a : b;  // max = 20

// 嵌套(不推荐,难读)
int result = (a > b) ? a : (b > c) ? b : c;

多条件判断

c
int year = 2024;

// 闰年:能被4整除且不能被100整除,或能被400整除
if ((year % 4 == 0 && year % 100 != 0) || (year % 400 == 0)) {
    printf("%d 是闰年\n", year);
}