条件判断 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);
}