2016-08-17 6 views
1

私はC++の初心者です。ネストされたループから抜け出す方法は不思議です。 break(2)はありますか?どうやってC++の入れ子になったループから抜け出すのですか?

#include <iostream> 

using namespace std; 

int main() { 
    for(int x = 5; x < 10; x++) { 
     for(int j = 6; j < 9; j++) { 
      for(int b = 7; b < 12; b++) { 
       //some statements 
       //is break(2) right or wrong 
       //or can I use break; break; 
      } 
     } 
    } 
} 
+1

「goto」の使用を検討してください。 – alexeykuzmin0

+2

いいえ、 'break(2)'は存在しません。 'goto'はオプションです –

+0

関数を使用します。 – Galik

答えて

4

はありません、(スコープの深いネストのご意見に応じて、あるいはおそらく幸い)残念ながら何もbreak(2)はありません。

これを解決するには、2つの主要な方法があります。

  1. が停止するように外側のループを伝えますbreak前にフラグを設定しますが。
  2. ネストされたループのいくつかを関数に入れて、breakを実行できるようにします。また、returnを使用してジャンプします。たとえば:

// returns true if should be called again, false if not 
bool foo() { 
    for(int j = 6; j < 9; j++) { 
     for(int b = 7; b < 12; b++) { 
      if (something) { 
       break; // one level 
      } 
      if (whatever) { 
       return true; // two levels 
      } 
      if (another) { 
       return false; // three levels 
      } 
     } 
    } 
} 

int main() { 
    for(int x = 5; x < 10; x++) { 
     if (!foo()) { 
      break; 
     } 
    } 
} 
+3

フローコントロールを実行する反復ロジック内で関数を濫用したり、追加のフラグをスタッフィングしたりすることは、コードを混乱させる2つの良い方法です。 – Quentin

+3

'goto'や例外とは対照的に? – LogicStuff

+1

@Quentin:私が概説したアプローチは、CおよびC++で非常に一般的であり、通常の練習としてほとんどの人に認識されます。あなたの意見では、より良いアプローチは何ですか? –

7

あなたはgotoを使用することができます。基本的には同じ機能です。

#include <iostream> 

using namespace std; 

int main() { 
    for(int x = 5; x < 10; x++) { 
     for(int j = 6; j < 9; j++) { 
      for(int b = 7; b < 12; b++) { 
       if (condition) 
        goto endOfLoop; 
      } 
     } 
    } 

    endOfLoop: 
    // Do stuff here 
} 
+0

forの中でgotoを使用できますか? – Ian

+0

@Ianどこでも使えます。しかし、まずそれに手を届かないでください。 – StoryTeller

+0

@Ian:あなたは安全に 'goto' * out *をループすることができますが、ループに' goto' *することは避けてください。 –

関連する問題