C语言 为什么在这段代码中x和y的值不递减?

ekqde3dh  于 2022-12-11  发布在  其他
关注(0)|答案(3)|浏览(154)

我一直试图弄清楚为什么下面的代码输出是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
我尝试过改变值和操作符,每次递减打印都没有执行。从我读到的主题来看,递减打印应该是可能的,但我不确定是什么原因使它没有执行。

hmae6n7t

hmae6n7t1#

正在执行if块。
在条件if(x++ == y++)中,x的当前值与y的当前值进行比较。两者都为1,因此比较结果为真,并且xy作为副作用都递增。
因此,下面的语句运行:

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

它打印xy的当前值,它们都是2,并且作为副作用,它们都递减。如果在此之后打印它们,您会看到它们都是1。

qyyhg6bp

qyyhg6bp2#

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

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;
}
kb5ga3dv

kb5ga3dv3#

#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

相关问题