3%3 = 1? Noob警报

时间:2017-03-11 23:13:29

标签: c++ switch-statement modulo

我很困惑。只是试图熟悉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但是为什么?

感谢您的解释!

3 个答案:

答案 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)