悬空 else 语句
如果有多个 if 和 else ,可以记住这样一条规则,else 总是跟最接近的 if 匹配。
我么首先从下面代码开始:
#include<stdio.h>
int main()
{
int a = 0;
int b = 2;
if(a==1)
if(b==2)
printf("hehe\n");
else
printf("haha\n");
return 0;
}
程序运行结果是啥?
很多初学者,上来判断 a 是 0,不等于 1,那就执行 else 子句,打印 haha;
但是当你去运行代码,输出的结果是:啥都不输出。
为什么呢?
这就是悬空 else 问题,如果有多个 if 和 else ,可以记住这样一条规则,else 总是跟最接近的 if 匹配。
上面的代码排版,让 else 和第一个 if 语句对齐,让我们以为 else 是和第一个 if 匹配的,当 if 语句不成立的时候,自然想到的就是执行 else 子句,打印 haha,但实际上 else 是和第二个 if 进行匹配的,这样后面的if ... else 语句是嵌套在第一个 if 语句中的,如果第一个 if 语句就不成立,嵌套 if 和 else 就没机会执行了,最终啥都不打印。
如果改成下面这样就更加容易理解了:
#include<stdio.h>
int main()
{
int a = 0;
int b = 2;
if(a==1)
{
if(b==2)
{
printf("hehe\n");
}
else
{
printf("haha\n");
}
}
return 0;
}
或者如果我们希望 else 确实和第一个 if 匹配,可以这样修改:
#include<stdio.h>
int main()
{
int a = 0;
int b = 2;
if(a==1)
{
if(b==2)
{
printf("hehe\n");
}
}
else
{
printf("haha\n");
}
return 0;
}
只要带上适当的大括号,代码的逻辑就会更加的清晰,所以大家以后在写代码的时候要注意括号的使用,让代码的可读性更高。