请看下面这段代码:
#include <stdio.h>
int main()
{
int x,y;
x = 0;
y = 1;
if(x == 0)
if(y == 0)
printf("x == 0 && y == 0\n");
else
printf("x!=0\n");
return 0;
}
程序的本意是:若x==0,则进行判断y是否等于0;若x!=0,则输出x!=0。
所以当x=0,y=1时,程序应该不输出任何东西。
但是执行结果为:x!=0
导致这个问题的原因是:else始终与同一括号内最近的未匹配的if结合。
要想实现程序的本意,修改如下:
#include <stdio.h>
int main()
{
int x,y;
x = 0;
y = 1;
if(x == 0)
{
if(y == 0)
printf("x == 0 && y ==0\n");
}
else
printf("x!=0\n");
return 0;
}
执行上述程序,不输出任何结果,符合我们的本意。
很多时候我们总是认为,当一个if嵌套另一个if且后面只跟一条语句的时候,没有必要加括号。但是上面的错误告诉我们,这并不是一个好的习惯,可能导致严重的错误。