Продолжить заявления - PullRequest
5 голосов
/ 23 мая 2011

Задаваясь вопросом, что оператор continue делает в цикле do...while(false), я смоделировал простой контрольный пример (псевдокод):

count = 0;
do {
    output(count);
    count++;
    if (count < 10)
        continue;
}while (false);

output('out of loop');

Результат был, к моему удивлению:

0
out of loop

Немного запутавшись, я изменил цикл с do...while на for:

for (count = 0; count == 0; count++) {
    output(count);
    if (count < 10)
        continue;
}
output('out of loop');

Хотя функционально это не то же самое, цель практически та же: создать условие, удовлетворяющее только первой итерации, и продолжить в следующих (пока не будет достигнуто определенное значение, исключительно для остановки возможных бесконечных циклов.) Они могут не запускать такое же количество раз, но функциональность здесь не важна.

Вывод был таким же, как и раньше:

0
out of loop

Теперь рассмотрим простой цикл while:

count = 0;
while (count == 0) {
    output(count);
    count++;
    if (count < 10)
        continue;
}
output('out of loop');

Еще раз, тот же вывод.

Это немного сбивает с толку, так как я всегда думал о выражении continue как о «переходе к следующей итерации». Итак, здесь я спрашиваю: что делает оператор continue в каждом из этих циклов? Это просто перейти к состоянию?

((Для чего бы то ни было, я проверял вышеупомянутое в JavaScript, но я считаю, что это не зависит от языка ... JS должен был по крайней мере сделать это правильно))

Ответы [ 4 ]

5 голосов
/ 23 мая 2011

В цикле for continue запускает 3-е выражение оператора for (обычно используется как итерация), затем условие (2-е выражение), а затем цикл, если условие истинно.Он не выполняет оставшуюся часть текущей итерации цикла.

В цикле while (или do-while) он просто запускает условие, а затем цикл, если условие выполняется.Он также не запускает оставшуюся часть текущей итерации цикла.

1 голос
/ 23 мая 2011

Лучше всего думать о continue как о прыжке в конец замкнутого цикла. Это может помочь:

#include <iostream>
using namespace std;

int main() {

    int n = 0;

    do {
        cout << n << endl;
        n += 1;
        if ( n == 3 ) {
            continue;
        }
        cout << "n was not 3" << endl;
    } while( n != 3 );

}

который печатает:

0
n was not 3
1
n was not 3
2

и завершается, потому что continue переходит к while () в конце цикла. похожая жесткость происходит для циклов for () и while ().

1 голос
/ 23 мая 2011

Ваше определение оператора continue как «перейти к следующей итерации» является правильным. Это заставит программу начать следующую итерацию путем первой переоценки условного выражения .

Проблема с вашими фрагментами в том, что все они выходят после одной итерации, потому что ваши условные выражения имеют значение false или count ==0. Это всегда будет возвращать false после одной итерации.

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

0 голосов
/ 23 мая 2011

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

for (int i = 0; i < 1000; i++) {
  if (some_condition) {
    continue; // would skip to the next iteration
  }

  if (some_other_condition) {
    break; // Exits the loop (block)
  }

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