c ++,switch操作符的问题

时间:2013-05-16 15:43:04

标签: c++ for-loop switch-statement

现在我正在查看一些c ++测试,在这里我找到了这样的代码:

int main()
{

    for (int i=0; i<3; i++)
    {
        switch(i)
        {
        case 0: cout<<"ZERO";
        case 1: cout<<"ONE"; continue;
        case 2: cout<<"TWO"; break;
        }
        cout<<endl;
    }

    system("PAUSE");

    return 0;
}

结果:

ZEROONEONETWO

我调试了,发现当i = 0时执行了案例0和案例1,为什么会发生?

7 个答案:

答案 0 :(得分:3)

当您点击case 0:时,它会落到case 1:,因为没有任何声明可以阻止它breakcontinue

答案 1 :(得分:1)

在案例0中缺少

break语句

答案 2 :(得分:1)

switch只是跳转到匹配的case标签。完成后,将忽略更多case个标签。另请注意,没有隐式break - 如果将其遗漏,后续代码将按顺序执行。

所以,

for (int i=0; i<3; i++)             // statements (1,2,3)
{
    switch(i)                       // statement 4
    {
    case 0: cout<<"ZERO";           // statement 5
    case 1: cout<<"ONE"; continue;  // statements 6; 7
    case 2: cout<<"TWO"; break;     // statements 8; 9
    }
    cout<<endl;                     // statement 10
}

展开

i = 0;                    // statement 1
// begin first iteration with i=0
if (i<3) => true          // statement 2
switch (i) => goto case 0 // statement 4
case 0: cout<<"ZERO"      // statement 5
        cout<<"ONE";      // statement 6
        continue;         // statement 7
        => jump to next iteration of loop
i++;                      // statement 3
if (i<3) => true          // statement 2
// second iteration, i=1
switch (i) => goto case 1 // statement 4
case 1: cout<<"ONE";      // statement 6
        continue;         // statement 7
        => jump to next iteration of loop
i++;                      // statement 3
if (i<3) => true          // statement 2
// second iteration, i=2
switch (i) => goto case 2 // statement 4
case 2: cout<<"TWO";      // statement 8
        break;            // statement 9
        => jump to end of switch
cout << endl;             // statement 10

答案 3 :(得分:1)

你对switch语句的误解很常见,它源于这样一个事实,即switch语句通常被引入,就好像它们是更方便的if-then-else语句一样。

他们不是!

将它们想象成一连串的指令。其高度的度量单位是instruction

您可以决定高度,即第一个case匹配与最后一个break之间的指示。

:)

答案 4 :(得分:0)

你需要一个休息声明,否则你会得到“堕落”

答案 5 :(得分:0)

你忘记了休息声明

switch(i){
    case 0:
        {
            //do something
            break;
        }
    case 1:
        {
            //do something
            break;
        }
    default:
        {
            //do something
            break;
        }

}

答案 6 :(得分:0)

因为每个案例都需要一个break语句。如果情况为true,则它将执行,直到找到break语句或switch strces结束。

您想要的代码

int main()
{

    for (int i=0; i<3; i++)
    {
        switch(i)
        {
        case 0: cout<<"ZERO"; break;
        case 1: cout<<"ONE"; continue;
        case 2: cout<<"TWO"; break;
        }
        cout<<endl;
    }

    system("PAUSE");

    return 0;
}