鱼C论坛

 找回密码
 立即注册
查看: 3073|回复: 10

[已解决]if else的疑问 求解答

[复制链接]
发表于 2022-3-21 17:07:39 | 显示全部楼层 |阅读模式

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

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

x
#include<stdio.h>
main(){
        int x=1,y=0;
        if(!x) y++;
        else if(x==0)
                 if(x) y+=2;
                 else  y+=3;
        printf("%d",y);
}
这段代码中    y结果为0   执行(x==0)判断后  为什么下面的代码不执行了  他也没有使用{}啊   
最佳答案
2022-3-24 14:29:48
本帖最后由 andy大宝 于 2022-3-24 14:35 编辑

研究了一下,明白您的意思了,解答下。
else if后面是一定要跟一段语句的,作为条件成立时执行的代码,基本原理如下:
#include<stdio.h> 
main(){
        int x=1,y=0;
        if(!x) y++;     
        else if(x==0)  //对x==0进行判断,条件为false
                 if(x) y+=2;  //因为上一次条件判断已经为false,且这里默认为else if的语句,所以不执行   
                 else  y+=3;  //这里的else匹配前面的if,所以也不执行          
        printf("%d",y);
        system("pause");
}
如果后面跟了语句,以上条件就会被判断:
#include<stdio.h> 
main(){
        int x=1,y=0;
        if(!x) y++;     
        else if(x==0)  
                 printf("我是一条关于else if条件的语句");
                 if(x) y+=2;    //这里的两行判断被单独执行
                 else  y+=3;               
        printf("%d",y);
        system("pause");
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-3-21 17:28:48 | 显示全部楼层
if(!x) 和 if(x == 0) 同意思,就好象说
(如果今天不下雨) 和 (如果今天是晴天) 同意思。

int main(){ // <-----这里你忘记写 int
}

在多个 if... else... 语句中,最好用 {} 作用域,不然你自己也乱,编译器也乱
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-3-21 17:43:15 | 显示全部楼层
傻眼貓咪 发表于 2022-3-21 17:28
if(!x) 和 if(x == 0) 同意思,就好象说
(如果今天不下雨) 和 (如果今天是晴天) 同意思。

谢谢你  这个是考题里的   我能理解 (x==0)的判断 我想问的是  既然已经是不成立了 为什么不是把下面的 if(x)y+=2;看作一条语句  而是把if...else 整个看作一条
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-3-21 17:44:29 | 显示全部楼层
1ytks 发表于 2022-3-21 17:43
谢谢你  这个是考题里的   我能理解 (x==0)的判断 我想问的是  既然已经是不成立了 为什么不是把下面的 ...

在没有{}的情况下  if  后不是只有一条语句吗  ?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-3-21 17:54:33 | 显示全部楼层
1ytks 发表于 2022-3-21 17:44
在没有{}的情况下  if  后不是只有一条语句吗  ?

else if(x == 0) // <--------这里判断 x = 0 成立
     if(x) y += 2; // 这里是在上面的 else if 作用域里,但是 x = 0 成立,所以永远达不到这里。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2022-3-23 14:24:42 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-3-24 11:02:51 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-3-24 14:29:48 | 显示全部楼层    本楼为最佳答案   
本帖最后由 andy大宝 于 2022-3-24 14:35 编辑

研究了一下,明白您的意思了,解答下。
else if后面是一定要跟一段语句的,作为条件成立时执行的代码,基本原理如下:
#include<stdio.h> 
main(){
        int x=1,y=0;
        if(!x) y++;     
        else if(x==0)  //对x==0进行判断,条件为false
                 if(x) y+=2;  //因为上一次条件判断已经为false,且这里默认为else if的语句,所以不执行   
                 else  y+=3;  //这里的else匹配前面的if,所以也不执行          
        printf("%d",y);
        system("pause");
}
如果后面跟了语句,以上条件就会被判断:
#include<stdio.h> 
main(){
        int x=1,y=0;
        if(!x) y++;     
        else if(x==0)  
                 printf("我是一条关于else if条件的语句");
                 if(x) y+=2;    //这里的两行判断被单独执行
                 else  y+=3;               
        printf("%d",y);
        system("pause");
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-3-24 22:25:37 From FishC Mobile | 显示全部楼层
if-else是就近匹配的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-3-31 09:53:28 | 显示全部楼层
andy大宝 发表于 2022-3-24 14:29
研究了一下,明白您的意思了,解答下。
else if后面是一定要跟一段语句的,作为条件成立时执行的代码,基 ...

谢谢你  很是明确了  else  if  中的   if  和else  为一对  但是 总的前提是 不成立  所以他们俩都没能执行  我已经搞明白了 很久没上论坛了  抱歉才看到
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-3-31 10:38:02 | 显示全部楼层
1ytks 发表于 2022-3-31 09:53
谢谢你  很是明确了  else  if  中的   if  和else  为一对  但是 总的前提是 不成立  所以他们俩都没能 ...

好的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-12-28 03:35

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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