else匹配规则:与它上面的距离它最近的且在同一级语句块的一个未与else匹配的if语句匹配
初接触C语言的同志可能会犯下面这种错误
if(x == 0if(y == 0){printf("这里有两个if语句\n");}
else
{printf("只有一个else语句,它将要与谁匹配呢?\n");
}
本意是想把else与第一个if语句匹配,但是因为第二个if语句也没有与之匹配的else语句,所以这个else会被编译器“判给”第二格if语句
解决这种错误的方式也很简单,每当写一个if()语句块时,都在后面跟一对大括号,把if()语句块的内容写在大括号里面,还有就是当if()语句块的逻辑写完了之后,立马在后面跟一个else()语句块,即使else()什么操作也不需要做,仅仅是一个空语句。
#include<stdio.h>int main()
{int a = 10;int b = 0;if (a != 0){printf("a != 0\n");if (b != 0){printf("b != 0\n");}}else{printf("a = 0\n");}system("pause");return 0;
}
上面的例子中把第二个if()语句块封装在第一个if()语句块内,那么因为仅有的一个else()语句块与第一个if()语句块在同一个语句块(大括号里),所以他俩会匹配成功,因此,即使b = 0,第二个if()语句块的条件不满足,也不会执行else()语句块的语句。