无法理解输入3的switch语句的输出

无法理解输入3的switch语句的输出,c,switch-statement,case,C,Switch Statement,Case,我不明白…请帮我找到这个代码的计算方法。 (输入为3) 输入3的输出为(实际): 三十三 五, 不应该是这样的吗?以下两个(预期): 九, 6它不工作的原因是默认值:完成后,没有中断因此控制继续进入案例9的代码中。这是固定的: int a = 9, b; scanf("%d", &b); switch(a+b) { case 3: a+= b * 2 - (a-b); b = a + b; break; case 5:

我不明白…请帮我找到这个代码的计算方法。 (输入为3)

输入3的输出为(实际):

三十三 五,

不应该是这样的吗?以下两个(预期):

九,
6

它不工作的原因是
默认值:
完成后,没有
中断因此控制继续进入案例9的代码中。这是固定的:

int a = 9, b;

scanf("%d", &b);

switch(a+b)
{
    case 3:
        a+= b * 2 - (a-b);
        b = a + b;
        break;
    case 5:
        a%=b;
        break;
    case 9:
        a+= a * 3 - (a-b);
        b = a/b;
        break;
    default:
        a-= b * 2 - (a-b);
        b = a - b;
        break;
}
printf("a = %d\nb = %d\n",a,b);

此外,以某种方式排序案例的可读性更好,而不仅仅是随机排序<代码>默认值
也总是在底部。

3
默认值
案例的末尾没有
break
语句,因此代码在遇到
中断
或到达
开关
的末尾之前,一直跌入以下案例

确保在每个案例后添加一个
中断
。此外,按照惯例,
默认值
案例应位于底部:

switch(a+b)
{
    case 3:
        a+= b * 2 - (a-b);
        b = a + b;
        break;
    case 9:
        a+= a * 3 - (a-b);
        b = a/b;
        break;
    case 5:
        a%=b;
        break;
    default:
        a-= b * 2 - (a-b);
        b = a - b;
        break;
}

在大多数
案例
块之后,您的
开关
语句缺少
中断
s,因此将执行多个案例(包括
默认
案例,因为
a+b
(12)不是指定案例之一)。大多数人将默认设置为最后一个案例,但没有要求这样做。
switch(a+b)
{
    case 3:
        a+= b * 2 - (a-b);
        b = a + b;
        break;
    case 9:
        a+= a * 3 - (a-b);
        b = a/b;
        break;
    case 5:
        a%=b;
        break;
    default:
        a-= b * 2 - (a-b);
        b = a - b;
        break;
}