我不能让我的开关功能工作

时间:2014-04-16 16:09:01

标签: c++ switch-statement

问题是总结1到10的所有值,包括值3和6,但是我不知道为什么我的开关功能没有滤除3和6。 这是我的代码

#include <iostream>
using namespace std;

int main() 
{
    int a=1,total=0;

    while (a<=10)
    {
        a++;

        switch (a)
        {
            case 3:
                continue;
            case 6:
                continue;
            default:
                total = total + a;
        }
    }

    cout << "Sum of the total numbers are " << total << endl;

    return 0;
}

2 个答案:

答案 0 :(得分:3)

如果将以下内容添加到while循环的末尾:

cout << "Current total: " << total << " a=" << a << endl;

问题将变得清晰。您的输出将如下所示:

Current total: 2 a=2
Current total: 6 a=4
Current total: 11 a=5
Current total: 18 a=7
Current total: 26 a=8
Current total: 35 a=9
Current total: 45 a=10
Current total: 56 a=11
Sum of the total numbers are 56

正如你所看到的,它正确地跳过3和6,但它缺少1并且正在增加11,这是我认为你没想到的两件事。

此外,您正在使用continue。使用switch语句,您希望使用break来阻止在当前案例之后执行案例。 (为了详细说明这一点,我认为continue会很好,因为我认为它正在做你想要的事情:将控制转回到while语句。如果{{1}这不会起作用但是,在switch语句之后移动了。如果你在a++开始a,请将条件更改为0,如其他帖子所述,那么你可以使用{{1} }语句而不是a < 10

如果您将continue移至while循环的末尾并修复break语句,我相信它会按预期运行。

担心我的编辑可能会让人感到困惑,这里有两种替代方法可以构建代码以获得您正在寻找的结果:

a++;

continue

答案 1 :(得分:1)

你的代码工作正常,你只在你的中央循环中犯了一些小错误:a从2变为11而不是从1到10.它应该是这样的:

int a=0, total=0;

while (a < 10)
{
    a++;

    // rest of code
}

编辑所以我的答案更完整。上面的修复将使您的代码正常工作,从而产生正确的结果,但正如@Pete所指出的那样,continue不是摆脱switch case语句的方法。您的continue语句会直接将您移回while循环的下一个循环。一个更好,更清洁的代码将是这样的:

int a=0,total=0;

while (a < 10)
{
    a++;
    switch (a)
    {
        case 3:
            break;
        case 6:
            break;
        default:
            total = total + a;
    }
    // in every case you will get here; even if a==3 or a==6
}

<强> EDIT2 如果你想让循环从1到10,这也是可能的:

int a=1,total=0;

while (a <= 10)
{
    switch (a)
    {
        case 3:
            break;
        case 6:
            break;
        default:
            total = total + a;
    }
    // in every case you will get here; even if a==3 or a==6
    a++;
}