Как остановить цикл for в c
Перейти к содержимому

Как остановить цикл for в c

  • автор:

Оператор 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 > 

как остановить цикл ?

Author24 — интернет-сервис помощи студентам

мне надо что б я забиндил остановку работы програмы на какуюто кнопку, допусти при нажатии цифры 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 заключается в круглые скобки. Если тело цикла включает несколько выражений разделяемых точкой с запятой, то все тело заключается в фигурные скобки.

  1. Присвойте переменной star значение 0. Пока значение star не достигнет 55 выводите на экран в строку по одной звездочке ( * ).
  2. С помощью цикла while запрограммируйте вывод на экран цифровых кодов и значений таблицы символов ASCII от 31 до 127 включительно. При этом после каждого десятого символа осуществляйте переход на новую строку. (Подсказка: чтобы переходить на новую строку, в цикле while надо использовать инструкцию if , в условии которой остаток 1 от деления на 10 сравнивается с нулем.) Вывод таблицы ASCII с помощью цикла while
  3. Используя внешний и вложенный циклы while организуйте вывод таблицы умножения на экран. Вывод таблицы умножения с помощью цикла 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 для строк, в которых искать фрагмент не нужно.

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

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