if分支语句中,当有多个if与else时,我们可以记住这样的规则,else总是与最接近的if匹配,下面我们来借助代码理解。
#include<stdio.h>
int main()
{
int a = 0;
int b = 1;
if (a == 1)
if (b == 1)
printf("hehe\n");
else
printf("haha\n");
return 0;
}
我们来思考一下,运行结果是什么呢?是haha吗?
我们可以看到输出结果为空,这是为什么呢?
这就是我们要讲到的 else悬空问题 ,上面的代码排版else与第一个if对齐,让我们误以为else与第一个if相匹配,当if表达式判断不成立时,就去执行else语句,打印haha。但实际上else是与第二个if相匹配,所以当遇到多个if与else时,我们只需要记住else总是与最接近的if匹配。所以第一个if表达式判断不成立,最终什么都没有打印。
如果代码写成下面这样就会更容易理解。
#include<stdio.h>
int main()
{
int a = 0;
int b = 1;
if (a == 1)
{
if (b == 1)
printf("hehe\n");
else
printf("haha\n");
}
return 0;
}
给if语句后加上大括号,让代码条理更清晰,增加可读性。