Оператор 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 >
как остановить цикл ?

мне надо что б я забиндил остановку работы програмы на какуюто кнопку, допусти при нажатии цифры 0 програма останавливалась.
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
Ответы с готовыми решениями:
Как остановить цикл?
#include <iostream> #include <algorithm> #include <math.h> using namespace std; int main() < .
Как остановить цикл при прекращении ввода
Как остановить цикл, если не было введено числа(2 раза нажать Enter )? #include<iostream> using.
Как остановить цикл при окончании строки string
Пробую разделять на слова, разделенные пробелом строку string. Внутренний код цикла работает.
![]()
5827 / 3478 / 358
Регистрация: 08.02.2010
Сообщений: 7,448
Если a — это целочисленная переменная:
1 2 3 4
do { /* . */ } while(a != 0);
Но будет плохо реагировать на неверный ввод.
Добавлено через 15 минут
Предыдущий вариант немного неправильный. Надо так:
1 2 3 4 5 6 7 8 9 10 11
do{ cout"vvedite celoe chislo: "endl; cin>>a; if(a == 0) break; for(i=0; i47; i++) if (a%mas[i]==0) cout"prostie mnozhiteli chisla a: "mas[i]endl; } while(true);
Регистрация: 18.07.2013
Сообщений: 382
1 2 3 4 5 6 7 8 9 10 11
do{ cout"vvedite celoe chislo: "endl; cin>>a; if(a == 0) break; for(i=0; i47; i++) if (a%mas[i]==0) cout"prostie mnozhiteli chisla a: "mas[i]endl; } while(true);
А как в билдере (делфи) остановить цикл?
У меня идет цикл (for, repeat — думаю неважно).
Можно как-то по кнопке на форме затормозить, чтобы типа цикл закончился принудительно. Подскажите пожалуйста!
Спасибо!
Почетный модератор
![]()
5850 / 2861 / 392
Регистрация: 01.11.2011
Сообщений: 6,907
Сообщение от PierL 
чтобы типа цикл закончился принудительно
1) Выполните его условие;
2) Оператором break можно принудительно выйти из одиночного цикла;
3) Конструкцией goto label можно принудительно выйти из вложенных циклов;
4) Разделы по билдеру и делфи специально созданы, чтобы обсуждать именно там их специфику. Учтите это пожалуйста на будущее и вопросы относящиеся не к языку, а к среде задавайте в соответствующих разделах.
Регистрация: 18.07.2013
Сообщений: 382
Сообщение от SatanaXIII 
Разделы по билдеру и делфи специально созданы, чтобы обсуждать именно там их специфику. Учтите это пожалуйста на будущее и вопросы относящиеся не к языку, а к среде задавайте в соответствующих разделах.
Понятно, извиняюсь.
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
Помогаю со студенческими работами здесь
Остановить цикл ввода последовательности, если введенное значение равно нулю.
В простую переменную последовательно вводятся числа. Окончание ввода 0. Сколько чисел больше своих.

Как остановить цикл while?
private void button1_Click(object sender, EventArgs e) < int index =.
Как остановить цикл each?
Подскажите, как остановить полностью цикл each? Получается остановить только отдельную итерацию.

Как остановить бесконечный цикл?
У меня есть скрипт, который отслеживает, запущен ли процесс, и если программа закрывается, то.
Или воспользуйтесь поиском по форуму:
Циклы в языке C: while, do-while, for. Инкремент и декремент
Прежде, чем изучать циклы, следует познакомиться с часто используемым в языке C способом увеличения/уменьшения значений переменных на единицу. Конечно, в Си работают такие формы изменения значений как, например, a += 1 или a -= 1 . Однако чаще используют операции инкрементирования (оператор инкремента ++ ) и декрементирования (оператор декремента — ): i++ или ++i , i— или —i . В результате этих операций переменные увеличиваются или уменьшаются на единицу.
Запомните, когда вы видите выражения типа ++i или i++ , то в результате их выполнения значение i меняется. Не надо делать вот так: i = ++i . Это совершенно лишнее.
Когда знак инкремента или декремента стоит перед переменной, то перед нами префиксная форма операции ( ++i , —i ), а когда после переменной, то постфиксная форма ( i++ , i— ). Когда эти выражения не участвуют в построении более сложных выражений, то между префиксной и постфиксной формами никакой разницы нет: что i++ , что ++i — без разницы, в результате мы получим значение i на единицу больше.
Однако когда эти выражения участвуют в построении более сложных, то разница между префиксной и постфиксной формами появляется и заключается в следующем: переменная над которой производится операция инкрементирования или декрементирования в постфиксной форме сначала используется в сложном выражении как есть, и только потом увеличивается на единицу; если мы имеем дело с префиксной формой, то переменная сначала изменяется, а затем используется. Например, код:
int a, b, c, d; /* выражение означает, что всем переменным присваивается 0 */ a = b = c = d = 0; printf("a=%d, b=%d, c=%d, d=%d\n", a, b, c, d); c = ++a; d = b++; printf("a=%d, b=%d, c=%d, d=%d\n", a, b, c, d);
, выведет на экране:
a=0, b=0, c=0, d=0 a=1, b=1, c=1, d=0
Объясняется такой результат так:
- значение переменной a было увеличено на единицу, после чего это значение было присвоено переменной c ;
- значение переменной b было сначала присвоено переменной d и только потом увеличено на единицу.
Еще один пример:
int x, y; x = y = 0; printf("%d\n", x++ > 0); printf("%d\n", ++y > 0);
На экране будет выведено:
Это результат логических выражений, где 0 означает ложь, а 1 — истину. В данном случае, когда x сравнивается с нулем, то его значение еще не увеличено, а когда сравнивается у , то его значение уже больше нуля.
Применять операторы инкремента и декремента можно также к переменным вещественного типа.
Цикл while
Цикл while в языке программирования C работает также как и в других языках программирования. По аналогии с условным выражением в инструкции if , условное выражение при while заключается в круглые скобки. Если тело цикла включает несколько выражений разделяемых точкой с запятой, то все тело заключается в фигурные скобки.
- Присвойте переменной star значение 0. Пока значение star не достигнет 55 выводите на экран в строку по одной звездочке ( * ).
- С помощью цикла while запрограммируйте вывод на экран цифровых кодов и значений таблицы символов ASCII от 31 до 127 включительно. При этом после каждого десятого символа осуществляйте переход на новую строку. (Подсказка: чтобы переходить на новую строку, в цикле while надо использовать инструкцию if , в условии которой остаток 1 от деления на 10 сравнивается с нулем.)

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

1 Операция нахождения остатка от деления в языке C обозначается знаком процента % .
Цикл do-while
Цикл do-while отличается от while лишь тем, что его тело будет выполнено хотя бы один раз независимо от условия выполнения цикла. Синтаксис цикла do-while можно описать так (фигурные скобки необязательны, если выражение только одно):
do < выражение1; …; >while (логич_выражение);
Этот цикл называют циклом с постусловием. Его используют реже обычного while . В принципе почти всегда можно обойтись без do-while , но в определенных ситуациях его использование упрощает код. Допустим требуется вывести на экран отдельные цифры числа. Любое число состоит хотя бы из одной цифры, даже число 0. Можно решить эту задачу с использованием цикла while :
while (a > 0) { printf("%d\n", a % 10); a = a / 10; }
Но в этом случае, если a равно 0, то цикл не выполнится ни разу. Пришлось бы перед циклом использовать инструкцию if , в которой сравнивать переменную с 0. Использование же цикла do-while решает эту проблему, т. к. его тело один раз выполнится даже при нулевом значении переменной:
do { printf("%d\n", a % 10); a = a / 10; } while (a > 0);
Цикл for
Представим синтаксис заголовка цикла for языка программирования C так:
for (часть1; часть2; часть3)
Заголовок цикла for включает три части, разделенных точкой с запятой; причем каждая часть может быть сложной, т. е. состоять из нескольких выражений, разделенных простой запятой. В первой части обычно указываются переменные и часто их начальные значения; во второй – с помощью логического(их) выражения(й) задаются условия, при которых выполняется тело цикла; в третью часть помещаются выражения, которые выполняются в конце каждой итерации цикла (чаще всего здесь изменяется значение переменной, заданной в первой части заголовка).
Вот так будет выглядеть программный код, выводящий таблицу символов на экран, в котором используется цикл for :
unsigned char a; for (a = 31; a 128; a++) { if (a % 10 == 0) printf("\n"); printf("%4d-%c", a, a); } printf("\n");
Напишите программу с использованием цикла for , выводящую на экран таблицу умножения (Подсказка: как и в случае с while следует использовать два цикла — внешний и вложенный.)
Операторы break и continue
Оператор break позволяет прервать выполнение цикла, а continue — прервать текущую итерацию (проход) цикла. Почти всегда можно обойтись без этих операторов, но иногда их использование позволяет упростить программный код и сделать его более понятным.
Рассмотрим пару примеров. Допустим, требуется проверить массив на наличие в нем хотя бы одного элемента со значением 0. Как только ноль будет обнаружен проверять оставшуюся часть массива уже нет смысла. Поэтому, чтобы не выполнять лишних итераций, используется оператор break .
#define N 10 int arr[N] = {6, 5, -4, 3, -7, 2, 7, 0, 3, 9}; int new_arr[N], i, j; for (i=0; iN; i++) { if (arr[i] == 0) { printf("\nIt contains zero"); break; } // не обязательно printf("%d ", arr[i]); } printf("\n");
Второй пример. Требуется из одного массива скопировать в другой только числа, которые больше 0. Можно с помощью continue прерывать итерацию цикла, если очередной элемент меньше либо равен нулю.
for(i=0, j=0; iN; i++) { if (arr[i] 0) continue; new_arr[j] = arr[i]; printf("%d ", new_arr[j]); j++; } printf("\n");
В данном случае использование continue совсем не очевидно с точки зрения надобности, т. к. легко можно обойтись без него, если изменить условие при if на противоположное, удалить continue , а оставшийся код поместить в тело оператора if .
Курс с решением задач:
pdf-версия
Прерывание цикла: операторы break, Continue, return и функция Abort

В некоторых случаях желательно прервать повторение цикла, проанализировав какие-то условия внутри него. Это может потребоваться в тех случаях, когда проверки условия окончания цикла громоздкие, требуют многоэтапного сравнения и сопоставления каких-то данных и все эти проверки просто невозможно разместить в выражении условия операторов for, do или while.
Один из возможных вариантов решения этой задачи это ввести в код какой-то флаг окончания (переменную). При выполнении всех условий окончания этой переменной присваивается некоторое условное значение. Тогда условие в операторах for, do или while сводится к проверке, не равно ли значение этого флага принятому условному значению.
Другой способ решения задачи использование оператора break. Он используется как в операторах цикла, так и в структурах switch. Оператор break прерывает выполнение тела любого цикла for, do или while и передает управление следующему за циклом выполняемому оператору. Например:
while(!feof(F))
Еще один способ прерывания цикла использование оператора goto, передающего управление какому-то оператору, расположенному вне тела цикла. Для прерывания циклов, размещенных в функциях, можно воспользоваться оператором return. В отличие от оператора break, оператор return прервет не только выполнение цикла, но и выполнение той функции, в которой расположен цикл.
Прервать выполнение цикла, а заодно и блока, в котором расположен цикл, можно также генерацией какого-то исключения. Наиболее часто в этих целях используется процедура Abort, генерирующая «молчаливое» исключение, не связанное с каким-то сообщением об ошибке.
Имеется еще процедура Continue, которая прерывает только выполнение текущей итерации, текущего выполнения тела цикла и передает управление на следующую итерацию. Пусть, например, нужно найти заданный фрагмент не в любой строке файла, а только в такой, которая начинается с символа «*». Тогда поиск можно было бы организовать следующим образом:
while(!feof(F))
В этом варианте при первом символе в строке, отличном от «*», текущая итерация прерывается и поиск в такой строке не производится. Таким образом, не тратится время на выполнение функции strstr для строк, в которых искать фрагмент не нужно.