为什么输出的值是2,我认为是3?我认为只有加大括号才能输出2
本帖最后由 超凡天赐 于 2017-1-21 23:08 编辑#include <stdio.h>
int main(void)
{
int x=2,y=-1,z=2;
if(x<y)
if(y<0)z=0;
else z+=1;
printf("%d",z);
return 0;
}
这是一道考试题 我也满惊讶的,去研究编译器对代码的逻辑判断可能没什么意义,但你可以理解为:做if判断后,后面必须接上一条语句,或用大括号把很多语句包起来作为一个整体,最后再做有无else的判断,这时对于这个if语句,还不算完整的结束,他还有做else的判断,所以当你第一个if判断完,后面编译器视为是一个语句的时候,再遇到一个if,然后接一个语句,最后这个else判断是第二个if的,因为第一个if的语句还没结束,不会做else的判断,因为里面的if判断完的z=0 ;语句,是确确实实的结束了,所以他后面接者做else判断,但是对于第一个if 他的语句里是if 对于里面的if 这个语句还不算完整的结束,因为每个if 最后一定会做else的判断,判断完才算整个if语句的结束。 if和else配对的原则是,else与其上面没有配对的if进行配对。先找到else 然后往上找if,找到最近的 配对,之后再往下找else,再向上找没有配对的if。除非加括号才不遵循这个原则。
#include <stdio.h>
int main(void)
{
int x=2,y=-1,z=2;
if(x<y)
{
if(y<0)
{
z=0;
}
else
{
z+=1;
}
}
printf("%d",z);
return 0;
}
帮你加上括号,再看就一目了然了。
页:
[1]