简体   繁体   中英

Why do the values of x and y not decrement in this code?

I have been trying to figure out why the output of the code below is 2 2 but can't seem to figure out why. I get that the else statement is getting executed but from what I've read I can't understand why the first print doesn't get executed.

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

Originally I expected the output to be 0 0

I have played around with changing the values and the operators and each time the decrement print never executed. From what I can tell from reading on the topic decrementing inside a print should be possible but I'm not sure what is making it not execute.

The if block is being executed.

In the condition if(x++ == y++) , the current value of x is compared with the current value of y . Both are 1 so the comparison is true, and both x and y are incremented as a side effect.

So then this statement runs:

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

Which prints the current values of x and y which are both 2, and both are decremented as a side effect. If you were to print both after this, you would see that both are 1.

In order to understand your code, you might do the following:

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

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

lot of help You get my recomendation use prefix ++x

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM