Как вырваться из вложенных циклов? - PullRequest
79 голосов
/ 14 марта 2012

Если я использую оператор break, он разорвет только внутренний цикл, и мне нужно использовать какой-нибудь флаг, чтобы разорвать внешний цикл. Но если вложенных циклов много, код будет выглядеть не очень хорошо.

Есть ли другой способ разорвать все петли? (Пожалуйста, не используйте goto stmt.)

for(int i = 0; i < 1000; i++) {
   for(int j = 0; j < 1000; j++) {
       if(condition) {
            // both of the loops need to break and control will go to stmt2
       }
   }

}

stmt2

Ответы [ 13 ]

0 голосов
/ 11 октября 2016
for(int i = 0; i < 1000; i++) {
    for(int j = 0; j < 1000; i++) {
       if(condition) {
          func(para1, para2...);
          return;
       }
    }
}

func(para1, para2...) {
    stmt2;
}
0 голосов
/ 14 марта 2012
i = 0;

do
{
  for (int j = 0; j < 1000; j++) // by the way, your code uses i++ here!
  {
     if (condition)
     {
       break;
     }
  }

  ++i;

} while ((i < 1000) && !condition);
0 голосов
/ 14 марта 2012
int i = 0, j= 0;

for(i;i< 1000; i++){    
    for(j; j< 1000; j++){
        if(condition){
            i = j = 1001;
            break;
        }
    }
}

сломает обе петли.

...