悬挂else引发的问题

[cpp]  view plain  copy
  1. #include <stdio.h>  
  2.   
  3. int main()  
  4. {  
  5.     int x,y;  
  6.     x = 0;  
  7.     y = 1;  
  8.     if(x == 0)  
  9.         if(y == 0)  
  10.             printf("x == 0 && y == 0\n");  
  11.     else  
  12.         printf("x!=0\n");  
  13.     return 0;  
  14. }  

程序的本意是:若x==0,则进行判断y是否等于0;若x!=0,则输出x!=0。

所以当x=0,y=1时,程序应该不输出任何东西。

但是执行结果为:x!=0

导致这个问题的原因是:else始终与同一括号内最近的未匹配的if结合。

要想实现程序的本意,修改如下:

[cpp]  view plain  copy
  1. #include <stdio.h>  
  2.   
  3. int main()  
  4. {  
  5.     int x,y;  
  6.     x = 0;  
  7.     y = 1;  
  8.     if(x == 0)  
  9.     {  
  10.         if(y == 0)  
  11.             printf("x == 0 && y ==0\n");  
  12.     }  
  13.     else  
  14.         printf("x!=0\n");  
  15.     return 0;  
  16. }  
执行上述程序,不输出任何结果,符合我们的本意。

很多时候我们总是认为,当一个if嵌套另一个if且后面只跟一条语句的时候,没有必要加括号。但是上面的错误告诉我们,这并不是一个好的习惯,可能导致严重的错误。

猜你喜欢

转载自blog.csdn.net/u010248077/article/details/80710654