web-dev-qa-db-ja.com

dowhileループに割り込む

ネストされたループに割り込むとどうなりますか?

次のコードを想定します。

for(int x = 0; x < 10; x++)
{
    do {
        if(x == 4)
            break;
        x++;
    } while(x != 1);
}

Breakステートメント、forループ、またはdo whileループに遭遇すると、どのループが終了しますか?

7
sgupta

breakは、常に最も内側のループを中断します。

6.8.6.3

Breakステートメントは、最小の囲みスイッチまたはiterationステートメントの実行を終了します。


両方のループから抜け出したい場合は、forの後にラベルを使用し、 goto でジャンプします。

8
cnicutar

または、gotoを使用したくない場合は、フラグを使用できます。

int flag = 0;

for(int x = 0; x < 10; x++)
{
    do {
        if(x == 4) {
            flag = 1;
            break;
        }
        x++;
    } while(x != 1);

if(flag) 
   break; // To break the for loop
}
4
P.P.

Breakは、Breakを含む最も近い/最も内側のループを強制終了します。あなたの例では、ブレークはdo-whileを強制終了し、制御はfor()ループにジャンプして戻り、for()の次の反復を開始するだけです。

ただし、do()ループとfor()ループの両方でxを変更しているため、実行は少し不安定になります。外側のXが5に達すると、無限ループが生成されます。

0
Marc B

whileが壊れ、forループが実行され続けます。

0
tehdoommarine