在下面的代码中,输出为1,但应为2。怎么样?
#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;
}
答案 0 :(得分:3)
运营商优先权。将行更改为:
count = count + ((num[i] % 2 == 1) ? 1 : 0);
或者,甚至更好:
count += num[i] % 2;
要说明:+
的优先级高于?:
。所以你的直线实际上被解释为:
count = (count + (num[i] % 2 == 1)) ? 1 : 0;
因此,在循环的每次迭代中,count被设置为1
或0
,如下所示:
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
答案 1 :(得分:0)
变化:
count = count+(num[i]%2==1)?1:0;
到
count = count+((num[i]%2==1)?1:0);
+
二元运算符的优先级高于条件运算符。