Операторы break и continue используются в циклических конструкциях (for, while, do..while) для управления потоком выполнения.
Тонкости:
break внутри вложенных циклов приведёт к выходу только из самого внутреннего цикла.goto можно сложным образом влиять на логику.continue в циклах while и do..while может вызвать неожиданный переход потока управления, если не учтён порядок действий.Пример:
for (int i = 0; i < 5; ++i) { if (i == 2) continue; if (i == 4) break; printf("%d ", i); } // Выведет: 0 1 3
Как поведёт себя цикл с оператором continue, если он использует сложные выражения при инициализации и обновлении счётчика?
Частый неверный ответ:
Многие считают, что при срабатывании continue все выражения внутри конструкции цикла (например, инкрементирование в for) не выполняются.
Правильный ответ:
В цикле for, при достигнутом continue, пропускается оставшаяся часть тела цикла, но выражение обновления счетчика (третья часть выражения в for) всё же выполняется:
for (int i = 0; i < 3; printf("step %d ", i), ++i) { if (i == 1) continue; printf("%d ", i); }
Выход:
0
step 0
step 1
2
step 2
История
Внутри цикла по массиву использовали continue, забыв обновить параметр-счётчик в явной форме (в while-цикле), что приводило к бесконечному циклу.
История
Вложенный цикл для поиска совпадений срабатывал break при первом же совпадении, но программист ожидал, что цикл прервётся полностью, в итоге обработка остальных элементов не выполнялась корректно.
История
В конструкции do..while, где головной цикл использовал continue, пропускалась ключевая завершающая операция перед переходом к следующей итерации, что приводило к потере данных из-за неправильного изменения состояния внутри тела цикла.