Перейти к содержимому

Как выйти из цикла в си

  • автор:

Что такое break в C++?

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

Пример:

while(true)

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

В отличии от continue, который пропускает лишь одну итерацию цикла, оператор break полностью выходить из цикла.

Выход при достижения нужной итерации:

int some = 0; while(some

Таким образом цикл закончиться после пяти и дальше работать не будет.

Выход из цикла. Операторы C break и continue Инструкция

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

Или мы собирали ягоды в лесу и собрали столько, сколько нам нужно (например, взяли с собой литровую банку и полностью её собрали), всё мы выходим из леса. Хотя могли остаться и ещё собирать. Как же это перевести на машинный язык?! Давайте попробуем!

Возьмем цикл While (пока).

Пока (есть в лесу ягоды)

Вопрос в том, как досрочно выйти из леса, а не остаться там собирать ягоды до бесконечности? Ведь они постоянно поспевают и закончатся нескоро. Не ночевать же нам в лесу!

В жизни понятно – мы просто собираемся и выходим из леса. В программировании для этого предусмотрено несколько операторов.

Выйти из цикла можно с помощью операторов C break и continue.

Приведем небольшие программы, когда используются эти операторы C.

1) Выход из бесконечного цикла

for(;;) //бесконечный цикл < sss=getch(); // получение символа, который считывается с клавиатуры if(sss==10) break; // если символ равен тринадцати, то выходим из бесконечного цикла. >
main() < int a[]=; // объявление и инициализация одномерной матрицы. int iii33,nn,ssss; //объявление переменных. nn=3; ssss=0; // инициализация переменных. for(((iii33=0; iii33 Cout

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

Следовательно, данные операторы C используются, когда нам нужно выйти из цикла, не дожидаясь его завершения.

Также можно ещё использовать оператор

Exit();

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

Int pddo; // объявление переменной. If ( pddo=0) // если делитель равен нулю. // вывод сообщения об ошибки и аварийный выход из программы. Else hj= gfe/ po; // иначе делим на это число, которое не равно нулю.
  • delitme 0.90
  • 24 января 2014, 14:08
  • 0
  • 104607

Выход из цикла while

Просто не надо создавать два глухих цикла (и интересно - почему снаружи while , а внутри for ?), если всё-таки из них предполагается когда-то выйти. И переменные для проверки условия продолжения цикла - самый нормальный способ.

9 июн 2015 в 16:35
Старый эпический топик (больше 1000 постов) на эту тему - rsdn.ru/forum/philosophy/57977.flat.1
9 июн 2015 в 19:11

5 ответов 5

Сортировка: Сброс на вариант по умолчанию

К сожалению, в отличие от Джавы, C и C++ не поддерживают механизм вроде break label , поэтому самый чистый вариант — использовать goto:

int main() < while (true) < for (;;) < goto breakAll; >> breakAll: puts("I'm out!"); > 

Также можно использовать флаг:

int main() < bool running = true; // bool определен в stdbool.h while (running) < for (;;) < running = false; break; >> puts("I'm out!"); > 

Большой разницы между этими вариантами нет.

Помимо этого случая, goto также используется в хорошем стиле C для обработки ошибок:

bars_t foo() < bar_t *bar1 = malloc(sizeof(*bar1)); if (!bar1) < goto cleanupNothing; >bar_t *bar2 = malloc(sizeof(*bar2)); if (!bar2) < goto cleanupBar1; >// . return (bars_t) < .one = bar1, .two = bar2 >; // в обратном порядке определения cleanupBar2: free(bar2); cleanupBar1: free(bar1); cleanupNothing: return (bars_t); > 

В C++ подобное не нужно, т.к. есть RAII, но из циклов по-прежнему выходят через goto .

Отслеживать
ответ дан 9 июн 2015 в 16:11
Alexei Averchenko Alexei Averchenko
1,049 6 6 серебряных знаков 11 11 бронзовых знаков
А тут, кстати, много меток и не надо, ибо free() лопает и NULL 🙂
9 июн 2015 в 16:21

Ещё добавлю пару способов.

Указанный код выносится в отдельную функцию. И теперь можно выходить по обычному return .

Способ два - нужно прост создать переменную флаг. И проверять ее. Где то так

bool go = true; while(go) < for(;;) < if (. ) < go = false; break;>> 

Но это плохой способ.

Отслеживать
ответ дан 9 июн 2015 в 16:19
112k 6 6 золотых знаков 93 93 серебряных знака 159 159 бронзовых знаков
Самый нормальный способ.
9 июн 2015 в 16:35
более того, он выходит с циклов любой вложенности:)
9 июн 2015 в 16:36

try < while (true) < for (;;) < throw 1; >> > catch (int) < //вышли из двух вечных циклов одновременно >

Отслеживать
32.1k 19 19 золотых знаков 79 79 серебряных знаков 106 106 бронзовых знаков
ответ дан 9 июн 2015 в 16:13
175 6 6 бронзовых знаков
Какая-то эзотерика
9 июн 2015 в 16:16
Исключения следует использовать для исключительных ситуаций.
9 июн 2015 в 18:00

"Исключения следует использовать для исключительных ситуаций" - а разве выход сразу из двух вечных циклов это не исключительная ситуация?

9 июн 2015 в 18:02

@outcast: Нет. Это вполне обычная ситуация. Исключительная не значит «мне ни разу не попадалась», значит «в программе должна возникать в виде исключения, а не правила».

9 июн 2015 в 20:01

Выход из 2-х! бесконечных циклов это правило? Вот это да, никогда бы не подумал 🙂 Как не трудно заметить все альтернативные варианты либо предполагают изменение циклов, что очевидно противоречит изначальному условию (один из них перестает быть бесконечным), либо выглядят крайне сомнительно (вариант с goto). За исключением варианта с вынесением внутреннего цикла в отдельную функцию и пары return false/break, но это усложнит программу добавив в нее еще 1 сущность.

Оператор break (C++)

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

Синтаксис

break; 

Замечания

Оператор break используется с оператором условного коммутатора и с помощью инструкций do, for, и в то время как операторы цикла.

switch В инструкции инструкция приводит к тому, break что программа выполняет следующую инструкцию за пределами инструкции switch . break Без инструкции выполняется каждая инструкция из соответствующей case метки до конца switch инструкции, включая default предложение.

В циклах break оператор завершает выполнение ближайшего заключенного do for оператора или while оператора. Управление передается оператору, который расположен после завершенного оператора, при его наличии.

В вложенных инструкциях break оператор заканчивается только оператором , for switch или while оператором do , который немедленно заключает его. Вы можете использовать инструкцию return или goto инструкцию для передачи управления из более глубоко вложенных структур.

Пример

В следующем коде показано, как использовать инструкцию break в цикле for .

#include using namespace std; int main() < // An example of a standard for loop for (int i = 1; i < 10; i++) < if (i == 4) < break; >cout // An example of a range-based for loop int nums []; for (int i : nums) < if (i == 4) < break; >cout > 
In each case: 1 2 3 

В следующем коде показано, как использовать break цикл while и do цикл.

#include using namespace std; int main() < int i = 0; while (i < 10) < if (i == 4) < break; >cout i = 0; do < if (i == 4) < break; >cout while (i
In each case: 0123 

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

#include using namespace std; enum Suit< Diamonds, Hearts, Clubs, Spades >; int main() < Suit hand; . . . // Assume that some enum value is set for hand // In this example, each case is handled separately switch (hand) < case Diamonds: cout // In this example, Diamonds and Hearts are handled one way, and // Clubs, Spades, and the default value are handled another way switch (hand) < case Diamonds: case Hearts: cout > 

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

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