tags:

views:

123

answers:

5
int main()
{
   int a=10,b=20;
   char x=1,y=0;
   if(a,b,x,y)
   {
      printf("EXAM");
   }
}

Hi, Please let me know why output of this question is "Printed Nothing"..

Thankss.

+3  A: 

The result of a,b,x,y is y (because the comma operator evaluates to the result of its right operand) and y is 0, which is false.

sepp2k
+2  A: 

The comma operator returns the last statement, which is y. Since y is zero, the if-statement evaluates to false, so the printf is never executed.

Mark Rushakoff
+1  A: 

Because expression a,b,x,y evaluates to y, which in turn evaluates to 0, so corresponding block is never executed. Comma operator executes every statement and returns value of last one. If you want logical conjunction, use && operator:

if (a && b && x && y) { ... }
el.pescado
+10  A: 

Comma operator - evaluates 1st expression and returns the second one. So a,b,x,y will return value stored in y, that is 0.

Vladimir
A: 

Others already mentioned that the comma operator returns the right-most value. If you want to get the value printed if ANY of these variables is true use the logical or:

int main()
{
   int a=10,b=20;
   char x=1,y=0;
   if(a || b || x || y)
   {
      printf("EXAM");
   }
 }

But then be aware of the fact that the comma evaluates all expressions whereas the or operator stops as soon as a value is true. So with

int a = 1;
int b;
if(a || b = 1) { ... }

b has an undefined value whereas with

int a = 1;
int b;
if(a, b = 1) { ... }

b will be set to 1.

johannes