ネストされたループに割り込むとどうなりますか?
次のコードを想定します。
for(int x = 0; x < 10; x++)
{
do {
if(x == 4)
break;
x++;
} while(x != 1);
}
Breakステートメント、forループ、またはdo whileループに遭遇すると、どのループが終了しますか?
break
は、常に最も内側のループを中断します。
6.8.6.3
Breakステートメントは、最小の囲みスイッチまたはiterationステートメントの実行を終了します。
両方のループから抜け出したい場合は、for
の後にラベルを使用し、 goto でジャンプします。
または、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
}
Breakは、Breakを含む最も近い/最も内側のループを強制終了します。あなたの例では、ブレークはdo-whileを強制終了し、制御はfor()ループにジャンプして戻り、for()の次の反復を開始するだけです。
ただし、do()ループとfor()ループの両方でxを変更しているため、実行は少し不安定になります。外側のXが5に達すると、無限ループが生成されます。
whileが壊れ、forループが実行され続けます。