Читайте также: |
|
Цикл do...while используется в тех случаях, когда вы не знаете точного количества повторов, но в то же время вам известно, что цикл необходимо выполнить, по меньшей мере, один раз. Структура цикла do...while приведена на рис. 7.
Выполнение инструкций, заключенных в фигурные скобки, повторяется до тех пор, пока является истинным условие, указанное в while. Правильность условия проверяется только в конце цикла, так что, даже если условие с самого начала не было истинным, цикл будет выполнен, по меньшей мере, один раз.
Рис. 7. Структура цикла do...while
Используя цикл do...while, следует указывать условие так, чтобы выполнение его не оказалось бесконечным. Ведь если условие все время будет выполняться, остановить повторение цикла можно будет только перезагрузкой системы с помощью кнопки Reset или комбинации клавиш Ctrl+Alt+Del.
Цикл do...while часто используется для того, чтобы повторять программу до тех пор, пока пользователь не решит закончить ввод:
main() { int temp; float celsius; char repeat; do { printf("Введите значение температуры: "); scanf("%d", &temp); celsius = (5.0 / 9.0) * (temp - 32); printf("%d градусов по Фаренгейту соответствует %6.2f по Цельсию\n", temp, celsius); printf("Желаете ввести еще значение?"); repeat = getchar(); putchar('\n'); } while (repeat == 'y' || repeat == 'Y'); }
|
В этом примере практически весь текст программы, исключая определение переменных, входит в большой блок do...while. Цикл будет повторяться до тех пор, пока в ответ на запрос будет вводиться символ Y или y. Обратите внимание, что инструкция, выводящая на экран запрос о продолжении работы, является последней инструкцией в блоке.
Цикл do...while также используют и для того, чтобы обеспечить правильность ввода данных. Например, у нас есть программа, в которой требуется ввести процент скидки стоимости товара в виде десятичной дроби. Если пользователь вводит значение, не соответствующее формату, например, меньше 0 либо больше или равно 1, можно, с помощью цикла do...while, предложить ему повторить ввод, написав инструкции примерно следующего содержания:
Условие, записанное в while с использованием логического оператора ИЛИ, проверяет, находится ли введенное число в определенных допустимых границах. Цикл будет повторяться до тех пор, пока пользователь не введет данные надлежащим образом. Но тут есть одна тонкость.
Описанная процедура может дать хорошие результаты только в том случае, если пользователь в конце концов поймет, что от него требуется, и введет правильное число. Если же вы имеете дело с человеком, который не имеет представления о том, что такое десятичная дробь, цикл может повторяться до бесконечности. Одним из способов справиться с такой ситуацией является использование алгоритма счетчика. Например, можно написать следующую программу:
main() { int count; float discount; count=0; do { printf("Введите размер скидки: "); scanf("%f", &discount); count++; } while ((discount < 0 || discount >= 1) && count < 20); if (count == 20) puts ("Хватит валять дурака"); }Теперь у пользователя есть 20 попыток, чтобы ввести правильные данные. Значение переменной count увеличивается на единицу после каждой неправильной попытки.
Для того чтобы выполнить только одну инструкцию в цикле do...while, нет необходимости использовать фигурные скобки. Например, следующая программа позволяет вводить символы, пока не будет нажата клавиша Y:
main() { int a; do a = getchar(); while (a!= 'y' && a!= 'Y'); }
Рис. 8. Вложенные циклы do...while
Дата добавления: 2015-07-08; просмотров: 166 | Нарушение авторских прав
<== предыдущая страница | | | следующая страница ==> |
Листинг 1. Программа создания таблицы умножения. | | | Проектирование программы |