【问题标题】:Why do the values of x and y not decrement in this code?为什么 x 和 y 的值在这段代码中没有递减?
【发布时间】:2022-12-09 03:33:15
【问题描述】:

我一直试图弄清楚为什么下面代码的输出是 2 2 但似乎无法弄清楚原因。我知道 else 语句正在执行,但从我读过的内容来看,我不明白为什么第一个打印没有被执行。

#include <stdio.h>
#include <stdlib.h>

int main()
{
    int x = 1, y = 1;

    if(x++ == y++)
        printf("%d%d", x--, y--);
    else
        printf("%d%d", x,y);
    return 0;
}

最初我希望输出为 0 0

我一直在尝试更改值和运算符,但每次都没有执行减量打印。从我阅读的主题中可以看出,印刷品内递减应该是可能的,但我不确定是什么导致它无法执行。

【问题讨论】:

  • 这称为未定义行为
  • 不,@DanielA.White,不是。
  • 2 2 是我期望的输出。
  • x--, y-- 之前使用 x 和 y 的值递减后
  • 您无法从输出中判断采用了哪个分支,因为两种方式都会产生相同的输出。

标签: c if-statement decrement


【解决方案1】:

if被执行。

在条件if(x++ == y++)中,将x的当前值与y的当前值进行比较。两者都是 1,因此比较结果为真,并且 xy 作为副作用递增。

那么这个语句运行:

printf("%d%d", x--, y--);

其中打印出 xy 的当前值,它们都是 2,并且都作为副作用递减。如果你在这之后打印两者,你会看到两者都是 1。

【讨论】:

    【解决方案2】:

    为了理解您的代码,您可以执行以下操作:

    int main()
    {
        int x = 1, y = 1;
    
        printf("x=%d, y=%d", x,y);
        if(x++ == y++)
        {
            printf("x=%d, y=%d", x,y);
            printf("x--=%d, y--=%d", x--, y--);
            printf("x=%d, y=%d", x,y);
        }
        else
            printf("x=%d, y=%d", x,y);
        return 0;
    }
    
    

    【讨论】:

      【解决方案3】:
      #include <stdio.h>
      #include <stdlib.h>
      
      int main()
      
      {
         int x = 1, y = 1;
      
         if(x++ == y++)               // here x and y become 2
          printf("%d%d", x--, y--);   // x with postfix decrement x and
                                      //  returns the initial value 
         else
          printf("%d%d", x,y);
        return 0;
      }
      

      很多帮助你得到 我的建议使用前缀++x

      【讨论】:

      • 他们是后缀减量, 不递增。
      • 为什么使用前缀增量会改变事情?比较将比较 22 而原始(后缀增量)比较 11,但不清楚这是否重要。
      • learncpp 我想这可以帮助您理解 post-- 和 pre-- 的区别。对错误感到抱歉,是的,你是对的,它是递减的,修复了它
      猜你喜欢
      • 2019-07-26
      • 2019-07-27
      • 2016-02-28
      • 1970-01-01
      • 1970-01-01
      • 2016-06-11
      • 1970-01-01
      • 2020-03-15
      • 1970-01-01
      相关资源
      最近更新 更多