我爱橙 发表于 2022-2-23 15:24:53

NO.181if结构为假时为什么不是不执行?

本帖最后由 我爱橙 于 2022-4-28 12:38 编辑

#include <stdio.h>

int main()
{
      int x = 1,y = 2,z=3;
      
      if(x>z)
                y=x;
                x=z;
                z=y;
      
      printf("z=%d\n", z);

      return 0;
}

if为假,不应该输出原结果z=3吗?

人造人 发表于 2022-2-23 15:28:41

欲速则不达,跟着教程慢慢来
教程中没有说多条语句要加大括号?

人造人 发表于 2022-2-23 15:29:12

if(x>z)
{
                y=x;
                x=z;
                z=y;
}

人造人 发表于 2022-2-23 15:30:23

再一次提醒,这是C语言,不是python

我爱橙 发表于 2022-2-23 15:42:00

人造人 发表于 2022-2-23 15:29
if(x>z)
{
                y=x;


还是没懂哎,if为假,大括号里不也不执行吗?

人造人 发表于 2022-2-23 15:44:37

我爱橙 发表于 2022-2-23 15:42
还是没懂哎,if为假,大括号里不也不执行吗?

输出3,有什么问题?

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

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

      if(x>z)
      {
                y=x;
                x=z;
                z=y;
      }

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

      return 0;
}
$ gcc-debug -o main main.c
$ ./main
z=3
$

大马强 发表于 2022-2-23 16:02:16

我爱橙 发表于 2022-2-23 15:42
还是没懂哎,if为假,大括号里不也不执行吗?

是呀,条件为假if语句的代码当然不会执行
你是对这个答案有问题,还是对这个if执行逻辑有问题?

我爱橙 发表于 2022-2-23 16:03:13

人造人 发表于 2022-2-23 15:44
输出3,有什么问题?

运行结果是2{:9_222:}这就是问题所在啊,我也觉得应该是3才对,可是程序运行结果是2

我爱橙 发表于 2022-2-23 16:26:50

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

答案,我觉得if为假不执行应该是原值3,但程序结果是2

大马强 发表于 2022-2-23 16:35:56

#include <stdio.h>

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

      return 0;
}

#include <stdio.h>

int main()
{
      int x = 1,y = 2,z=3;
      
      if(x>z) // 用了 {} 这三句就是if语句的作用域,if为假这三句都不执行
      {
              y=x;
              x=z;
              z=y;
                }

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

      return 0;
}

湫的小草原 发表于 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的用法

YSW9527 发表于 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;
}

爱上pc的Qt 发表于 2022-2-23 20:45:50

C语言中是用括号来判断是否为下一级语句,如果没有括号,那么只有逻辑判断之后的一个语句为下级语句,其他的都是要执行的语句,没有层级关系。
python是根据你缩进的来判断层级关系,别搞混了。

我就是个小白,都是兴趣,上述都是我自己的理解,有错误希望多多指出

我爱橙 发表于 2022-2-24 12:44:20

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

好的好的,之前是有人指出来过没加括号,但我就还是没懂加和没加的区别,感谢你这个细节提醒了

我爱橙 发表于 2022-2-24 12:46:38

大马强 发表于 2022-2-23 16:35


好一目了然了,超级感谢,就是我今天看帖子之前弹到下面返回来才看到你的,不然就直接设置你的为最佳了{:9_229:}

大马强 发表于 2022-2-24 17:06:16

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

没事{:10_297:}
页: [1]
查看完整版本: NO.181if结构为假时为什么不是不执行?