超凡天赐 发表于 2017-1-12 21:20:12

为什么输出的值是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;
}
这是一道考试题

fc1735 发表于 2017-1-12 21:57:04

我也满惊讶的,去研究编译器对代码的逻辑判断可能没什么意义,但你可以理解为:做if判断后,后面必须接上一条语句,或用大括号把很多语句包起来作为一个整体,最后再做有无else的判断,这时对于这个if语句,还不算完整的结束,他还有做else的判断,所以当你第一个if判断完,后面编译器视为是一个语句的时候,再遇到一个if,然后接一个语句,最后这个else判断是第二个if的,因为第一个if的语句还没结束,不会做else的判断,因为里面的if判断完的z=0 ;语句,是确确实实的结束了,所以他后面接者做else判断,但是对于第一个if 他的语句里是if 对于里面的if 这个语句还不算完整的结束,因为每个if 最后一定会做else的判断,判断完才算整个if语句的结束。

lzgw 发表于 2017-1-12 22:21:47

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]
查看完整版本: 为什么输出的值是2,我认为是3?我认为只有加大括号才能输出2