鱼C论坛

 找回密码
 立即注册
查看: 3517|回复: 15

[已解决]NO.181if结构为假时为什么不是不执行?

[复制链接]
发表于 2022-2-23 15:24:53 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 我爱橙 于 2022-4-28 12:38 编辑
  1. #include <stdio.h>

  2. int main()
  3. {
  4.         int x = 1,y = 2,z=3;
  5.         
  6.         if(x>z)
  7.                 y=x;
  8.                 x=z;
  9.                 z=y;
  10.         
  11.         printf("z=%d\n", z);

  12.         return 0;
  13. }
复制代码


if为假,不应该输出原结果z=3吗?
最佳答案
2022-2-23 19:11:16
#include <stdio.h>

int main()
{
    int x = 1, y = 2, z = 3;

   /* if (x > z)
        y = x;//不加{},if语句的作用范围只是一条语句
    x = z;
    z = y;*/
    if (x > z)//正确写法,要使if、else、for、while等语句的作用范围是多条语句时,一定要加{},不管几条语句加{}是个好习惯
    {
        y = x;
        x = z;
        z = y;
    }
     

    printf("z=%d\n", z);

    return 0;
}
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2022-2-23 15:28:41 | 显示全部楼层
欲速则不达,跟着教程慢慢来
教程中没有说多条语句要加大括号?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-2-23 15:29:12 | 显示全部楼层
if(x>z)
{
                y=x;
                x=z;
                z=y;
}
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-2-23 15:30:23 | 显示全部楼层
再一次提醒,这是C语言,不是python
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-2-23 15:42:00 | 显示全部楼层
人造人 发表于 2022-2-23 15:29
if(x>z)
{
                y=x;

还是没懂哎,if为假,大括号里不也不执行吗?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-2-23 15:44:37 | 显示全部楼层
我爱橙 发表于 2022-2-23 15:42
还是没懂哎,if为假,大括号里不也不执行吗?

输出3,有什么问题?

  1. $ cat main.c
  2. #include <stdio.h>

  3. int main()
  4. {
  5.         int x = 1,y = 2,z=3;

  6.         if(x>z)
  7.         {
  8.                 y=x;
  9.                 x=z;
  10.                 z=y;
  11.         }

  12.         printf("z=%d\n", z);

  13.         return 0;
  14. }
  15. $ gcc-debug -o main main.c
  16. $ ./main
  17. z=3
  18. $
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-2-23 16:02:16 | 显示全部楼层
我爱橙 发表于 2022-2-23 15:42
还是没懂哎,if为假,大括号里不也不执行吗?

是呀,条件为假if语句的代码当然不会执行
你是对这个答案有问题,还是对这个if执行逻辑有问题?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-2-23 16:03:13 | 显示全部楼层
人造人 发表于 2022-2-23 15:44
输出3,有什么问题?

运行结果是2这就是问题所在啊,我也觉得应该是3才对,可是程序运行结果是2
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-2-23 16:26:50 | 显示全部楼层
大马强 发表于 2022-2-23 16:02
是呀,条件为假if语句的代码当然不会执行
你是对这个答案有问题,还是对这个if执行逻辑有问题?

答案,我觉得if为假不执行应该是原值3,但程序结果是2
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-2-23 16:35:56 | 显示全部楼层
  1. #include <stdio.h>

  2. int main()
  3. {
  4.         int x = 1,y = 2,z=3;
  5.         
  6.         if(x>z)
  7.             y=x; // 不用{} ,if默认 只将下一句当作 其用作语句。当前为假不执行这句
  8.         x=z; //        这句会执行
  9.         z=y; // 这句会执行
  10.         
  11.         printf("z=%d\n", z);

  12.         return 0;
  13. }
复制代码

  1. #include <stdio.h>

  2. int main()
  3. {
  4.         int x = 1,y = 2,z=3;
  5.         
  6.         if(x>z) // 用了 {} 这三句就是if语句的作用域,if为假这三句都不执行
  7.         {
  8.                 y=x;
  9.                 x=z;  
  10.                 z=y;
  11.                 }
  12.   
  13.         
  14.         printf("z=%d\n", z);

  15.         return 0;
  16. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-2-23 17:26:50 | 显示全部楼层
我爱橙 发表于 2022-2-23 16:03
运行结果是2这就是问题所在啊,我也觉得应该是3才对,可是程序运行结果是2

没修改前,也就是本贴的代码,if为假,确实不执行,所以第一行的y=x,确实不执行,可是if只管到这里啊,后面的x=z,z=y,if不管的,是会执行的,所以结果就是z=y=2啊, 前面也有人按照你的思路帮你改过来了,你想结果是3 的话,就得加大括号,让if把下面的三个式子都管了才行,这样if为假,自然会输出3,题主的问题不是3和2 的问题,而是你好像不怎么明白if的用法
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-2-23 19:11:16 | 显示全部楼层    本楼为最佳答案   
#include <stdio.h>

int main()
{
    int x = 1, y = 2, z = 3;

   /* if (x > z)
        y = x;//不加{},if语句的作用范围只是一条语句
    x = z;
    z = y;*/
    if (x > z)//正确写法,要使if、else、for、while等语句的作用范围是多条语句时,一定要加{},不管几条语句加{}是个好习惯
    {
        y = x;
        x = z;
        z = y;
    }
     

    printf("z=%d\n", z);

    return 0;
}
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-2-23 20:45:50 From FishC Mobile | 显示全部楼层
C语言中是用括号来判断是否为下一级语句,如果没有括号,那么只有逻辑判断之后的一个语句为下级语句,其他的都是要执行的语句,没有层级关系。
python是根据你缩进的来判断层级关系,别搞混了。

我就是个小白,都是兴趣,上述都是我自己的理解,有错误希望多多指出
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-2-24 12:44:20 | 显示全部楼层
湫的小草原 发表于 2022-2-23 17:26
没修改前,也就是本贴的代码,if为假,确实不执行,所以第一行的y=x,确实不执行,可是if只管到这里啊, ...

好的好的,之前是有人指出来过没加括号,但我就还是没懂加和没加的区别,感谢你这个细节提醒了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-2-24 12:46:38 | 显示全部楼层

好一目了然了,超级感谢,就是我今天看帖子之前弹到下面返回来才看到你的,不然就直接设置你的为最佳了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-2-24 17:06:16 | 显示全部楼层
我爱橙 发表于 2022-2-24 12:46
好一目了然了,超级感谢,就是我今天看帖子之前弹到下面返回来才看到你的,不然就直接设置你的为最佳了{: ...

没事
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-6-16 23:39

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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