-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

デバッグしたところ、i = 0 のときにケース 0 とケース 1 が実行されることがわかりました。

4

7 に答える 7

3

ヒットcase 0:すると にフォールスルーcase 1:breakますcontinue

于 2013-05-16T15:44:34.963 に答える
1

switchcase一致するラベルにジャンプするだけです。それを行った後、それ以上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

case 0 に break ステートメントがありません

于 2013-05-16T15:44:23.810 に答える
1

switch ステートメントの誤解は一般的なものであり、switch ステートメントは、より便利な if-then-else ステートメントのように導入されることが多いという事実に由来します。

ではない!

それらを一連の命令のように考えてください。その高さの測定単位はinstructionです。

高さ、つまり、最初のcase一致と最も近い次の の間の指示を決定しbreakます。

:)

于 2013-05-16T16:16:13.403 に答える
0

すべてのケースに break ステートメントが必要だからです。ケースが true の場合、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 に答える
0

breakステートメントが必要です。そうしないと、「フォールスルー」が発生します

于 2013-05-16T15:44:29.767 に答える