鱼C论坛

 找回密码
 立即注册
查看: 1338|回复: 2

[已解决]为什么输出的值是2,我认为是3?我认为只有加大括号才能输出2

[复制链接]
发表于 2017-1-12 21:20:12 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 超凡天赐 于 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;
}
这
是一道考试题
最佳答案
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语句的结束。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 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语句的结束。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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;
}
帮你加上括号,再看就一目了然了。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-27 19:36

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表