【问题标题】:cannot understand the output for switch statement for input 3无法理解输入 3 的 switch 语句的输出
【发布时间】:2019-06-03 18:23:13
【问题描述】:

我没有得到这个..请帮助我找到评估此代码的方法。 (输入为 3)

int a = 9, b;

scanf("%d", &b);

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

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

33 5

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

9 6

【问题讨论】:

  • 您的switch 语句在大多数case 块之后缺少breaks,因此将执行多个案例(包括default 案例,因为a+b (12) 不是指定情况之一)。

标签: c switch-statement case


【解决方案1】:

3default 情况的末尾没有break 语句,因此代码落入 到以下情况,直到遇到break 或直到到达switch 的末尾。

请务必在每个案例后添加break。此外,default 的案例应该按照惯例放在底部:

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;
}

【讨论】:

    【解决方案2】:

    它不起作用的原因是在default: 完成后,没有break;,因此控制继续进入case 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);
    

    此外,最好以某种方式对案例进行排序,而不是随机排序,以提高可读性; default 也总是在底部。

    【讨论】:

    • 大多数人把默认设置为最后一种情况,但没有要求这样做。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多