-3

现在我正在查看一些 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

我调试了一下,发现case 0和case 1在i = 0时执行,为什么会这样?

4

7 回答 7

3

当您点击case 0:它时,它会落空,case 1:因为没有声明可以阻止它这样做,例如 a breakor continue

于 2013-05-16T15:44:34.963 回答
1

在 case 0 处缺少 break 语句

于 2013-05-16T15:44:23.810 回答
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
于 2013-05-16T15:58:54.497 回答
1

您对 switch 语句的误解很常见,它源于这样一个事实,即 switch 语句经常被引入,好像它们在 if-then-else 语句中更方便键入。

他们不是!

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

您决定高度,即第一个case匹配和最接近的后续匹配之间的说明break

:)

于 2013-05-16T16:16:13.403 回答
0

您需要一个 break 语句,否则您将“失败”

于 2013-05-16T15:44:29.767 回答
0

你忘记了休息声明

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

}
于 2013-05-16T15:46:08.427 回答
0

因为每个案例都需要一个 break 语句。如果 case 为真,那么它将一直执行,直到找到一个 break 语句或 switch 大括号结束。

你想要的代码

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;
}
于 2013-05-16T15:46:21.053 回答