2012-08-31 7 views
7

중첩 루프를 중단하면 어떻게됩니까?do while while break 루프

다음 코드를 가정 : 루프 또는 루프 동안 할 일에 대한 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 나는 고토를 좋아한다. 나는 그것이 C++의 나쁜 형태라는 것을 이해하며, 나는 논쟁하지 않을 것이다. 하지만 C에서 꽤 괜찮습니다 :-) – cnicutar

+0

for 루프에 추가 조건을 지정하면이 조건을 벗어날 때 사실이 아닐 수 있습니다. – teppic

0

중단은 중단이 포함 된 가장 가까운/가장 안쪽 루프를 종료합니다. 예제에서 break는 do-while을 죽이고 control은 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

실적이 좋으면 처음부터이 코드를 작성하지 않아도됩니다. 특정 값을 얻었을 때 휴식을 취하는 경우 외부 루프를 사용할 필요가 없습니다. – Floris

+0

이것은 내가 작성한 코드가 아니며 사람들이 의미하는 바를 이해하는 데 도움이되는 설명 목적으로 사용 된 것입니다. – sgupta