标签: visual-c++
问题是
int i = 6, x = 11; switch(i % 3 ? 0 : 1) { case 0: x /=2; break; case 1: x +=3; case 2: x *=4; } cout << "x = " << x;
所以我应该得到的答案是x = 5,但是,从答案脚本来看它应该是x = 56。 那是为什么?
答案 0 :(得分:1)
两个陈述:
x +=3;
和
x *=4;
被执行。这就是为什么(有关条件运算符引用的here和switch语句的here)。
在表达式
i % 3 ? 0 : 1
i % 3是条件。作为整数值,如果等于零则认为是假,否则为真。在您的情况下,i的值为6,因此i % 3为0,因此条件为false,:之后的值将在switch语句中进行评估。
i % 3
i
:
switch
:之后的值为1,因此代码会跳转到case 1并执行x += 3。现在x 11 + 3 = 14 。
1
case 1
x += 3
x
但break之前没有case 2声明,因此执行只会继续x *= 4而x会变为 14 * 4 = 56
break
case 2
x *= 4