Question

In the following code output is 1 but it should be 2 . how ?

#include<stdio.h>

int main()
{
        int count=0,i;
        int num[4]={1,2,3,4};

        for(i=0;i<4;++i)
            count = count+(num[i]%2==1)?1:0;

        printf("%d",count);
        return 0;
}
Was it helpful?

Solution

Operator precedence. Change the line to:

    count = count + ((num[i] % 2 == 1) ? 1 : 0);

Or, even better:

    count += num[i] % 2;

To explain: + has a higher precedence than ?:. So your line as-is is actually being interpreted as:

    count = (count + (num[i] % 2 == 1)) ? 1 : 0;

So on each iteration of the loop, count is being set to either 1 or 0, as follows:

  i   |  count  |  (num[i] % 2 == 1)  | count + (num...)  |  new count
------+---------+---------------------+-------------------+-------------
  0   |    0    |      1 (true)       |      1            |    1    
  1   |    1    |      0 (false)      |      1            |    1
  2   |    1    |      1 (true)       |      2            |    1             
  3   |    1    |      0 (false)      |      1            |    1

OTHER TIPS

Change:

 count = count+(num[i]%2==1)?1:0;

to

count = count+((num[i]%2==1)?1:0);

+ binary operator has higher precedence than conditional operator.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top