Можете ли вы «разорвать» несколько циклов, как PHP, передав число? - PullRequest
1 голос
/ 30 октября 2010

Если вы находитесь в 3-м вложенном цикле в PHP, вы можете сделать break 3; и разбить все циклы на 3 уровня.

break, кажется, работает в C. Но если я сделаю break 3Я получаю синтаксическую ошибку.Я думаю, что это не поддерживает.

Каков лучший способ разорвать несколько циклов?Должен ли я установить флаг, который проверяет циклы - и разрывает ли он установлен?

Есть ли что-нибудь более элегантное?

Ответы [ 6 ]

10 голосов
/ 30 октября 2010

Иногда goto - самое элегантное решение.

10 голосов
/ 30 октября 2010

Вы можете использовать goto, но:

alt text

8 голосов
/ 30 октября 2010

Обычные решения:

  • флаги или другое состояние, проверенное в каждом из вложенных циклов
  • goto метка после конца внешнего цикла
  • рефакторинг вашего кода так, чтобы вложенные циклы были в своей собственной функции.Используйте return для фактического прерывания от самого внешнего цикла.
4 голосов
/ 30 октября 2010

Другим способом, кроме goto, является использование общей переменной во всех условных частях циклов for. Эта общая переменная может использоваться как переключатель уничтожения для цикла.

bool done = false;
for (int i = 0; i < someNum && !done; i++ ) {
  for ( int j = 0; j < someOtherNum && !done; i++ ) {
    for ( int j = 0; j < again && !done; i++ ) { 
      if ( someCondition ) { 
        done = true;
        break;
      }
    }
  }
}
0 голосов
/ 30 октября 2010

Ответ Стива Джессопа пришел за несколько секунд до того, как я был готов опубликовать свой ответ.У меня есть одно предложение, чтобы добавить к нему, хотя это не может считаться элегантным - бросить исключение.

0 голосов
/ 30 октября 2010

Я тоже согласен.goto имеет свое применение, и это одно из основных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...