Search code examples
cif-statementdecrement

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.


Solution

  • 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.