Как выйти из while c
Перейти к содержимому

Как выйти из while c

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

Оператор while позволяет повторять выполнение оператора до тех пор, пока указанное выражение не станет ложным.

Синтаксис

iteration-statement :
while ( expression ) statement

Объект expression должен иметь арифметический тип или тип указателя. Выполнение происходит следующим образом:

  1. Вычисляется expression .
  2. Если expression изначально имеет значение false, тело while оператора никогда не выполняется, и управление передается от while оператора к следующему оператору в программе. Если expression имеет значение true (ненулевое), выполняется текст инструкции и процесс повторяется, начиная с шага 1.

Выполнение оператора while прерывается, если в теле оператора выполняется оператор break , goto или return . Для прерывания итерации без выхода из цикла while используйте оператор continue . Оператор continue передает управление в следующую итерацию оператора while .

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

while ( i >= 0 )

В этом примере производится копирование символов из string2 в string1 . Если i значение больше или равно 0, то string2[i] присваивается string1[i] и i уменьшается. Когда значение переменной i становится равным 0 (или меньше 0), выполнение оператора while прекращается.

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

Как выйти из while c

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

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

Иногда бывают случаи , когда нам неизвестно, сколько конкретно шагов цикла необходимо для выполнения условия задачи. Конечно, мы можем
подождать, пока цикл завершится полностью, но это нерационально, да и в некоторых случаях недопустимо вовсе. Тогда логично возникает вопрос: «Как выйти из цикла?». Для этого в паскале есть три оператора, функции которых — прервать текущий цикл / шаг цикла. Итак знакомьтесь — это оператор break ,оператор continue и оператор goto. А теперь о каждом в отдельности.

Оператор break

Этот оператор необходим для полного выхода из цикла. То есть если в цикле встретился оператор break — цикл прерывается сразу. Приведу пример.
Имеем массив, состоящий из 10 чисел ( 4 1 3 2 6 8 9 10 11 2 ). Сколько чисел можно сложить, чтобы их сумма была меньше 20. Сложение начинаем с начала массива.

const
s: array [1.. 10] of integer = (4, 1, 3, 2, 6, 8, 9, 10, 11, 2);

var
i, x, y: integer;

begin
for i := 1 to 10 do
if x + s[i] < 20 then begin
x := x + s[i];
y := y + 1;
end
else break;
writeln(‘Максимальная сумма первых чисел , не превышающая 20 = ‘, x);
writeln(‘Количество чисел ,которые можно сложить по условию задачи = ‘, y);
end.

В результате мы получим

Максимальная сумма первых чисел, не превышающая 20 = 16
Количество чисел, которые можно сложить по условию задачи = 5

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

Оператор continue

Оператор также обеспечивает прерывание, но не цикла, а шага цикла. То есть если в цикле встретился оператор continue — происходит прерывание текущего шага цикла и выполняется переход к следующему шагу. Разберем на примере. Пусть у нас есть список работников на предприятии. Каждый месяц подсчитывается их средняя трудовая активность и на основе этого решается
вопрос о выдаче премии. Размер премии зависит от трудовой активности, а необходимая трудовая активность для получения премии 95%. Необходимо составить статистику за один месяц на 10 рабочих. Все данные вводятся с клавиатуры. Напишем простенькую программу, использую цикл,условие и оператор continue

const
n = 5;

var
i: integer;
p, a: array [1..n] of integer;
s: array [1..n] of string;

begin

for i := 1 to n do
begin
writeln(‘Введите данные ‘);
readln(s[i], a[i]);
if a[i] < 95 then continue else readln(p[i]);
end;
for i := 1 to n do
begin
write(‘Фамилия : ‘, s[i]);writeln;
write(‘Активность : ‘, a[i], ‘%’);writeln;
write(‘Премия : ‘, p[i], ‘ руб’);writeln;
end;
end.

Вобьем произвольные данные. Пусть это будут фамилии Петров, Сидоров, Васечкин, Корненко, Усманов. Забьем также данные по активности работы и премиям. Имеем на выходе

Фамилия: петров
Активность: 99%
Премия: 500 руб
Фамилия: сидоров
Активность: 89%
Премия: 0 руб
Фамилия: васечкин
Активность: 95%
Премия: 400 руб
Фамилия: корненко
Активность: 100%
Премия: 600 руб
Фамилия: усманов
Активность: 91%
Премия: 0 руб

Что мы видим? Очередность ввода такая: имя, активность, премия. Причем следует заметить, что если при вводе активность оказалась ниже 95%, то ввода премии просто не происходит (действует оператор continue). Шаг цикла заканчивается и происходит переход к следующему шагу.

Оператор goto

Оператор goto отличается двух предыдущих тем, что его применение гораздо шире. Если операторы break и continue используются только в цикле, то оператор goto можно использовать во всем теле программы. Суть заключается в том, что в каком-нибудь месте ставится метка и, если в процессе выполнения компилятор встретит ссылку на метку — он вернется к метке. Теперь как
применять goto в паскале. Необходимо сделать три вещи: объявить метку, установить метку, поставить ссылку на метку. Здесь есть только один момент. Объявление метки происходит до var (до объявление обычных переменных), используя label т.к. переменная особая. Все же остальное происходит уже в теле цикла.

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

label metka;
var
i: integer;

begin
for i := 1 to 10 do
begin
write(i:3);
if i = 5 then goto metka;
end;
metka:
end.

Как вы видите здесь цикл прерывается как только i:=5 и оператор goto переносит процесс компиляции к метке (metka). Таким образом на экран выводится

На этом все. Статья про выход из цикла завершена. Если нашли какие-либо ошибки / опечатки, или у Вас есть интересная информация по этой статье — отписывайтесь в комментариях ниже.

7 Replies to “Выход из цикла”

Topcoder :

Да goto — это зло. Если вы пишите много goto в своей программе, то другому программисту будет очень сложно разобраться что куда ведет, и в каком порядке выполняется программа.

Mr.Cheater :

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

UnlimNET :
go to — это зло, правда? Почему?
Сеятель :

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

Mr.Cheater :
ibzh,
Спасибо, поправил

если в процессе выполнения компилятор встретит ссылку на метку — он вернется к метке . Таким образом компиляция продолжает выполняться с уже пройденного этапа. Это не верно

Арслан :
Спасибо за информацию, пригодилось

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

Рубрики

  • C++ (27)
    • STL (2)
    • Арифметические операции (1)
    • Ввод-вывод (1)
    • Дополнительная информация (1)
    • Задачи (2)
    • Массивы (1)
    • Сортировки (2)
    • Типы данных (1)
    • Условные операторы (1)
    • Циклы (1)
    • Задачи читателей (6)
    • Одномерные массивы (2)
    • Простые операции (10)
    • Символьные строки (1)
    • Сортировка (3)
    • Типы данных (1)
    • Условные операторы (3)
    • Циклы (5)
    • Поисковая оптимизация для интернет-магазинов (25)

    Создание и продвижение интернет-магазинов. Предприниматель и автор книг Артур Мазитов. ООО «ГКТ» ОБЩЕСТВО С ОГРАНИЧЕННОЙ ОТВЕТСТВЕННОСТЬЮ «ГРУППА КОМПАНИЙ «ТЕКСТ» ООО «ГКТ» ИНН 0275927174, ОГРН 1220200002582 Юридический адрес 450076, Республика Башкортостан, г.о. Город Уфа, г Уфа, ул Коммунистическая, д. 16, кв. 41 |
    2014 © Copyright Все права защищены

    Выход из цикла. Операторы 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

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

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