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

Time:12-09

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.

CodePudding user response:

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.

CodePudding user response:

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

CodePudding user response:

#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

  • Related