Continue c как работает
Перейти к содержимому

Continue c как работает

Оператор continue (C)

Оператор continue передает элемент управления в следующую итерацию ближайшего внешнего оператора do , for или while , в которой она отображается, минуя все оставшиеся операторы в теле оператора do , for или while .

Синтаксис

jump-statement :
continue ;

Следующая итерация оператора do , for или while определяется следующим образом.

В операторе do или while следующая итерация начинается с повторного вычисления выражения оператора do или while .

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

Вот пример оператора continue :

В этом примере тело оператора выполняется при i больше 0. Для первой переменной f(i) присваивается значение x ; затем, если x равно 1, выполняется оператор continue . Остальные операторы в теле игнорируются. Выполнение возобновляется в начале цикла с вычисления теста цикла.

Операторы перехода

XYZ School

Язык C# предлагает несколько операторов, позволяющих немедленно перейти на другую строку программы. Давайте их рассмотрим.

Оператор goto

Имеющийся в C# оператор goto представляет собой оператор безусловного перехода. Когда в программе встречается оператор goto, ее выполнение переходит непосредственно к тому месту, на которое указывает этот оператор. Он уже давно «вышел из употребления» в программировании, поскольку способствует созданию «макаронного» кода. Хотя в некоторых случаях он оказывается удобным и дает определенные преимущества, если используется благоразумно. Главный недостаток оператора goto с точки зрения программирования заключается в том, что он вносит в программу беспорядок и делает ее практически неудобочитаемой. Но иногда применение оператора goto может, скорее, прояснить, чем запутать ход выполнения программы.

Для выполнения оператора goto требуется метка — действительный в C# идентификатор с двоеточием. Метка должна находиться в том же методе, где и оператор goto, а также в пределах той же самой области действия.

Пример использования оператора goto:

Использование оператора goto

Репутация оператора goto такова, что в большинстве случаев его применение категорически осуждается. Вообще говоря, он, конечно, не вписывается в рамки хорошей практики объектно-ориентированного программирования.

Оператор break

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

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

В отношении оператора break необходимо также иметь в виду следующее. Во-первых, в теле цикла может присутствовать несколько операторов break, но применять их следует очень аккуратно, поскольку чрезмерное количество операторов break обычно приводит к нарушению нормальной структуры кода. И во-вторых, оператор break, выполняющий выход из оператора switch, оказывает воздействие только на этот оператор, но не на объемлющие его циклы.

Оператор continue

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

В циклах while и do-while оператор continue вызывает передачу управления непосредственно условному выражению, после чего продолжается процесс выполнения цикла. А в цикле for сначала вычисляется итерационное выражение, затем условное выражение, после чего цикл продолжается:

Оператор continue в C#

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

Оператор return

Оператор return организует возврат из метода. Его можно также использовать для возврата значения. Имеются две формы оператора return: одна — для методов типа void, т.е. тех методов, которые не возвращают значения, а другая — для методов, возвращающих конкретные значения.

Для немедленного завершения метода типа void достаточно воспользоваться следующей формой оператора return:

Когда выполняется этот оператор, управление возвращается вызывающей части программы, а оставшийся в методе код пропускается.

Для возврата значения из метода в вызывающую часть программы служит следующая форма оператора return:

Зачем нужен continue? (Наглядный пример)

У меня такая ситуация,что нужно объяснить концепцию операторов break/continue(зачем они нужны и как работают),с первым все понятно,а со вторым возникают проблемы с наглядным примеров использования на практике.

Вопрос: Можете подсказать какой-нибудь наглядный пример где без него никак не обойтись?

PS в гугле все примеры высосаны из пальца либо не совсем понятно зачем «он» здесь нужен

PSS пример его работы в реальной программе(любой)

user avatar

При грамотном составлении условий, в операторе continue нет «необходимости». Сколько примеров не видел — везде можно было обойтись без него, поменяв немного условия. Но вот облегчить жизнь этот оператор может.

Первый пример, который приходит в голову — выйти из текущей итерации по условию:

Но данная ситуация не нуждается в continue , ведь проще в данном случае сделать отрицание условия и он даже не понадобится:

Более «адекватный» пример использования, но менее очевидный — улучшение читаемости циклов с большим числом вложенности условий. Представим пример:

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

Стоит отметить, что данный код выглядит несколько нестандартно что ли. Лично я видел такое буквально пару раз, уж не знаю, с чем это связано 🙂

Этот оператор используется в циклах for, foreach, while и необходим для того, чтобы прервать выполнение текущей итерации цикла с места его вызова и перейти к следующей итерации. Естественно, как и break оператор continue оператор является оператором завершающим тело условия.

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

Оператор continue нужен для пропуска 1 итерации в цикле, чаще всего за каким либо условием.

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

Обычно когда хотят показать "работоспособность" этих двух операторов приводят в пример самый обычный цикл for. Давайте для начала так и сделаем.

Вот первый пример с оператором break.

Может быть (все может быть) ,что программисту встала задача вывести все числа от 0 до 10, но если условие вдруг срабатывает, срочно остановить выполнение цикла.

Вывод таков:

Все как нам и нужно было. Как только условие выполнилось, процесс выполнения цикла прекратился.

Теперь с оператором continue. Теперь нашему программисту понадобилось выполнять цикл до конца и проводить какие-то операции со счётчиком. Но как только выполняется условие, приступить к следующей итерации, пропуская эту.

Вот пример кода с выводом.

Вывод:

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

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *