鱼C论坛

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

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

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

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

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

x
本帖最后由 超凡天赐 于 2017-1-21 23:08 编辑
  1. #include <stdio.h>
  2. int main(void)
  3. {
  4.     int x=2,y=-1,z=2;
  5.     if(x<y)
  6.         if(y<0)  z=0;
  7.         else z+=1;
  8.     printf("%d",z);
  9.     return 0;
  10. }
复制代码
是一道考试题
最佳答案
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语句的结束。
小甲鱼最新课程 -> https://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语句的结束。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-1-12 22:21:47 | 显示全部楼层
if和else配对的原则是,else与其上面没有配对的if进行配对。先找到else 然后往上找if,找到最近的 配对,之后再往下找else,再向上找没有配对的if。除非加括号才不遵循这个原则。
  1. #include <stdio.h>
  2. int main(void)
  3. {
  4.     int x=2,y=-1,z=2;
  5.     if(x<y)
  6.      {
  7.         if(y<0)
  8.         {
  9.             z=0;
  10.         }
  11.         else
  12.         {
  13.               z+=1;
  14.          }
  15. }
  16.    printf("%d",z);
  17.     return 0;
  18. }
复制代码

帮你加上括号,再看就一目了然了。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-6-10 18:01

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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