2016-08-17 2 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)이 없습니다.

이 문제를 해결하는 두 가지 방법이 있습니다 :

  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

흐름 제어를 수행하기 위해 반복 논리 내부에서 함수를 혼용하거나 추가 플래그를 채우는 것은 코드를 엉망으로 만드는 두 가지 좋은 방법입니다. – 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를 사용할 수 있습니까? – Ian

+0

@Ian 어디에서나 사용할 수 있습니다. 그래도 먼저 그것에 도달하지 마십시오. – StoryTeller

+0

@Ian : 당신은 루프의'goto' * out *을 안전하게 할 수는 있지만 루프 안으로'goto' *하는 것을 조심하십시오. –

관련 문제