2012-08-31 16 views
7

ネストされたループを中断するとどうなりますか?do whileループ中にブレークする

は、次のコードを考える:ループまたはdo-while文のためのbreak文を、遭遇に終了するループ

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

+6

'break'はあなたがしたい場合には、DO /しばらく出るであろう内部ループ –

+0

から唯一の出口OUTERループから抜けて、goto文でロールバックする必要があります。 – Shark

+2

外側ループからいくつかの方法で壊れることがあります。あなたは 'goto'、' return'、 'x = 10;'などを設定することができます。 –

答えて

6

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

6.8.6.3

break文は、最小の囲み スイッチまたは反復文の実行を終了します。


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

+0

ありがとう、しかし、私が避けようとしていたことは、ちょっと醜いですが、それは私の意見です。ブランチを使用したアセンブリでは条件付き実行に非常に似ていますが、 – sgupta

+0

@ user1075375私はgotoが好きです。私はそれがC++の悪い形であると理解し、私は議論しません。しかしC言語ではとてもいいです:-) – cnicutar

+0

forループに余分な条件を入れてしまいます。これを中断したいときには当てはまりません。 – teppic

0

ブレークは、ブレークを含む最も近い/最も内側のループを強制終了します。あなたの例では、ブレークはdo-whileをkillし、コントロールはfor()ループに戻り、for()の次の繰り返しを開始します。

しかし、do()ループとfor()ループの両方でxを変更しているので、実行はちょっと変わってしまいます。外側のXが5に達すると、無限ループが生成されます。

+0

コードはそのためだけに意味されていました。 – sgupta

0

whileが壊れてforループが実行され続けます。あなたが使用したくない場合は

4

あるいは、フラグを使用することができ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 
} 
+0

キャッシュ内の4バイトの無駄と余分な条件付きチェックインループを考慮すると、gotoはパフォーマンスの点で優れているようです。私はループが何度も実行されることを期待しているので、もっとそうです。 – sgupta

+1

演奏後の場合は、まずこのコードを書いてはいけません。特定の値に達したときに中断する場合は、forループをまったく必要としません。 – Floris

+0

これは私が書いたコードではありません。私が意味していたことを人々が理解するのを手助けするためのものです。 – sgupta