Продолжить; используется, чтобы пропустить много петель - PullRequest
3 голосов
/ 28 января 2011

Вот схема моего кода:

while (..)
{
   for (...; ...;...)
        for(...;...;...)
            if ( )
            {
                 ...
                 continue;
            }
} 

Что будет дальше?Второй цикл будет повторяться только один раз, нет?Хотелось бы, чтобы оно дошло до времени, возможно ли это?

Спасибо!

Ответы [ 6 ]

5 голосов
/ 28 января 2011

continue здесь влияет на ближайший цикл - ваш второй for. Есть два способа прыгнуть прямо к while:

  • goto, хотя иногда «считается вредным», это, пожалуй, главная причина, почему он все еще существует
  • return

Для иллюстрации последнего:

while (..)
{
    DoSomething(..);
}

void DoSomething(..) {
    for (...; ...;...)
      for(...;...;...)
          if ( )
          {
             ...
             return;
          }
}

и первое:

while (..)
{
   for (...; ...;...)
        for(...;...;...)
            if ( )
            {
                 ...
                 goto continueWhile;
            }
   continueWhile:
       { } // needs to be something after a label
}
2 голосов
/ 28 января 2011

Вы должны установить переменную, чтобы определить, когда вам нужно выходить из цикла.

while (..)
{
    bool goToWhile = false; 

    for (...; ... && !goToWhile; ...)
        for (...; ... && !goToWhile; ...)
            if ( )
            {
                ...
                goToWhile = true; 
            }
} 

Придумайте лучшие имена;)

2 голосов
/ 28 января 2011
while (..)
{
   for (...; ...;...)
        for(...;...;...)
            if ( )
            {
                 ...
                 goto superpoint;
            }
superpoint:
//dosomething
} 
1 голос
/ 28 января 2011

continue или break всегда для самого внутреннего цикла, который принимает continue или break.В этом случае это самый низкий цикл for в вашем коде.

1 голос
/ 28 января 2011

Непосредственно невозможно, так как continue; только продолжает выполнение текущего цикла, для перехода во внешний цикл единственное, что вы можете сделать, это установить некоторые флаги и проверить его во внешнем цикле

0 голосов
/ 28 января 2011

Это невозможно только с оператором continue. Операторы продолжения и прерывания влияют только на самые внутренние циклы, в которые они вложены.

Вы можете установить переменную и проверить ее во внешнем цикле. Или реорганизуйте оператор IF и условие разрыва в операторе for.

while (..)
{
   for (...; ...;...)
   {
        for(...;...;...)
            if ( )
            {
                 ...
                 skipLoop = true
            }
         if (skipLoop)
             continue;
    }
} 

Надеюсь, это поможет!

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