Студопедия

Главная страница Случайная страница

Разделы сайта

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника






Цикл с постусловием: do while






Циклы while и for являются циклами с предусловием. Условия проверки вычисляются перед каждой итерацией цикла, поэтому вполне возможно, что операторы, помещенные в цикл, никогда не выполнятся. В языке С имеется также цикл с постусловием, в котором проверка условия производится после прохода каждой итерации цикла, благодаря чему гарантируется выполнение операторной части цикла минимум один раз. Эта разновидность цикла называется циклом do while. В листинге 6.15 приведен пример.

Листинг 6.15. Программа do_while.c

/* do_while.c -- цикл с постусловием */

#include < stdio.h>

int main(void)

{

const int secret_code = 13;

int code_entered;

 

do

{

printf(" Чтобы войти в клуб лечения трискадекафобии, \n");

printf(" пожалуйста, введите секретный код: ");

scanf(" %d", & code_entered);

} while (code_entered! = secret_code);

printf(" Поздравляем! Вас вылечили! \n");

return 0;

}

Программа в листинге 6.15 читает входные значения до тех пор, пока пользователь не введет 13. Ниже показан результат выполнения этой программы:

Чтобы войти в клуб лечения трискадекафобии, пожалуйста, введите секретный код: 12

Чтобы войти в клуб лечения трискадекафобии, пожалуйста, введите секретный код: 14

Чтобы войти в клуб лечения трискадекафобии, пожалуйста, введите секретный код: 13

Поздравляем! Вас вылечили!

 

Эквивалентная программа, в которой применяется цикл while, была бы несколько длиннее, как можно видеть в листинге 6.16.

Листинг 6.16. Программа entry.с

/* entry.c -- цикл с предусловием */

#include < stdio.h>

int main(void)

{

const int secret_code = 13;

int code_entered;

 

printf(" Чтобы войти в клуб лечения трискадекафобии, \n");

printf(" пожалуйста, введите секретный код: ");

scanf(" %d", & code_entered);

while (code_entered! = secret_code)

{

printf(" Чтобы войти в клуб лечения трискадекафобии, \n");

printf(" пожалуйста, введите секретный код: ");

scanf(" %d", & code_entered);

}

printf(" Поздравляем! Вас вылечили! \n");

 

return 0;

}

 

Общая форма цикла do while имеет вид:

do

оператор

while (выражение);

Оператор может быть простым или составным. Обратите внимание на то, что сам цикл do while считается оператором и таким образом требует наличия после него точки с запятой (рис. 6.5).

Цикл do while всегда выполняется, по меньшей мере, один раз, потому что проверка условия производится после того, как тело цикла выполнено. С другой стороны, циклы for и while могут не выполниться ни разу, поскольку проверка условия цикла осуществляется перед входом в цикл. Использование циклов do while должно быть ограничено случаями, при которых требуется выполнение хотя бы одной итерации. Например, программа запроса пароля мола бы содержать цикл, как демонстрируется в следующем псевдокоде:

do

{

запросить ввод пароля прочитать пользовательский ввод

}

while (введенные данные не совпадают с паролем);

 

Избегайте применения структуры do while, которая имеет вид, подобный показанному ниже псевдокоду:

do

{

запросить у пользователя, желает ли он продолжить какие-то действия

}

while (ответом является 'да');

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

 






© 2023 :: MyLektsii.ru :: Мои Лекции
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав.
Копирование текстов разрешено только с указанием индексируемой ссылки на источник.