ネストされたループを中断するとどうなりますか?do whileループ中にブレークする
は、次のコードを考える:ループまたはdo-while文のためのbreak文を、遭遇に終了するループ
for(int x = 0; x < 10; x++)
{
do {
if(x == 4)
break;
x++;
} while(x != 1);
}
?
ネストされたループを中断するとどうなりますか?do whileループ中にブレークする
は、次のコードを考える:ループまたはdo-while文のためのbreak文を、遭遇に終了するループ
for(int x = 0; x < 10; x++)
{
do {
if(x == 4)
break;
x++;
} while(x != 1);
}
?
break
は、常に最も内側のループを壊します。
6.8.6.3
break文は、最小の囲み スイッチまたは反復文の実行を終了します。
あなたは、両方のループから抜け出すfor
後にラベルを使用してgotoにジャンプします。
ブレークは、ブレークを含む最も近い/最も内側のループを強制終了します。あなたの例では、ブレークはdo-whileをkillし、コントロールはfor()ループに戻り、for()の次の繰り返しを開始します。
しかし、do()ループとfor()ループの両方でxを変更しているので、実行はちょっと変わってしまいます。外側のXが5に達すると、無限ループが生成されます。
コードはそのためだけに意味されていました。 – sgupta
whileが壊れてforループが実行され続けます。あなたが使用したくない場合は
あるいは、フラグを使用することができ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'はあなたがしたい場合には、DO /しばらく出るであろう内部ループ –
から唯一の出口OUTERループから抜けて、goto文でロールバックする必要があります。 – Shark
外側ループからいくつかの方法で壊れることがあります。あなたは 'goto'、' return'、 'x = 10;'などを設定することができます。 –