我很困惑。只是试图熟悉switch structures
并得到“1”作为此代码的结果:
int x = 13;
switch(x % 5) {
case 0: x=2; break;
case 1: x=3; break;
case 2: x=4; break;
case 4: x=5; break;
default: x = x % 3;
}
cout << x;
我认为switch表达式会将其结果与不同的情况进行比较。没有案例const_i为3所以我已经考虑了3%3 = 0的结果。但结果是1.
如果我改变默认值:x = x%3到x%7,我知道x仍然是13但是为什么?
感谢您的解释!
答案 0 :(得分:3)
由于没有case
这样:
case 3:
此声明将被执行:
default: x = x % 3;
结果是:
13%3 = 1
答案 1 :(得分:1)
如果您将switch
中的控制表达式重写为
switch (x = x % 5)
或等同于
switch (x %= 5)
然后x
的值将更改为3
。然后执行将跳转到default:
标签,您的x = x % 3
表达式会将x
设置为0
,完全如您所料。
但是,您的原始控制表达式不会修改x
。它正确地将x % 5
计算为3
,但保持x
不变。当您到达x
标签时,13
仍为default:
。因此,x = x % 3
正确地将x
设置为1
。
答案 2 :(得分:0)
这是因为您没有在切换到x时分配计数值。 13%5 i 3但是没有3的情况所以默认使用。但由于你没有将计数值分配给x仍然是13,所以3%13是1.尝试将开关改为开关(x = x%5)