Цикл do while в C++: все что вам нужно знать
Всем привет! Сегодня мы завершим тему, которую начали еще в самом начале изучения C++ - циклы. Циклы очень важны для программирования, поэтому в каждом языке вы можете встретить циклы: for, while и do while
. О последнем из только что перечисленных циклов и пойдет речь.
Как работает цикл do while в C++
Из названия цикла do while
можно понять, что у него много общего с циклом while
. Мы можем вспомнить, что в цикле while
сначала происходит проверка условия, а потом уже выполняется тело цикла. У цикла do while
похожая схема работы, но есть маленькое различие. Тело цикла выполняется раньше, чем произойдет проверка условия.
Да, это значит, что в любом случае тело цикла выполнится хотя бы раз, если даже условие первоначально является ложным.По этой причине цикл do while
и не является столь популярным в C++. Но в некоторых ситуациях использование данного цикла просто необходимо.
Как создать цикл do while в C++
Чтобы создать цикл do while нужно использовать данную конструкцию:
do {
<тело цикла>
} while(<условие цикла>);
Давайте разберем, как работает данная конструкция:
- В самом начале стоит зарезервированное слова -
do
. С помощью его мы как бы говорим компилятору, что дальше тело циклаdo while
. <Тело цикла>
- тут мы должны вписать тот код, который хотим, чтобы повторялся после каждой итерации.while
- считается тоже зарезервированным словам в C++, после которого компилятор должен понять, что дальше идет условие цикла.- В
<Условие цикла>
- мы должны записать логическое выражение, при истинности которого цикл будет выполняться дальше.
Очень важно знать! Когда вы реализовали данную конструкцию, нужно поставить точку с запятой после условия цикла
. Многие начинающие прогеры забывают про это и потом из-за своей не внимательности ищут ошибку в совершенно другом месте.
Как работает цикл do while на примере
Чтобы вы поняли, как работает конструкция do while, давайте разберем пример с ее использованием:
int main() {
int chislo = 0;;
cout << "Вводите числа, а мы определим четное ли число." << endl;
cout << "А если вам захочется прекратить вводить числа, то введите -1." << endl;
cout << endl;
cout << "Начали!" << endl; cin >> chislo;
do {
if (chislo % 2 == 0) cout << "Четное";
else cout << "Нечетное";
cin >> chislo;
} while (chislo != -1);
system("pause");
return 0;
}
Давайте тщательно разберем данный пример:
- В строке 3: объявили переменную
chislo
. В этой переменной мы будем хранить все числа, которые пользователь будет вводить. - В строке 5 - 6: сообщаем пользователю правила игры.
- В строке 10: считываем первое число пользователя в переменную
chislo
. - В строке 12: объявили цикл
do while
. Давайте поподробнее разберемся, что происходит у него внутри:- В строках 14 - 15: проверяем введенное пользователем числа на четность, с помощью логического оператора ветвления
if-else
. - В строке 17: снова считываем введенное число.
- В строке 19: проверяем условие цикла. В качестве логического выражение
chislo != -1
. Если пользователь ввел число -1, то цикл сразу же прекратит свою работу.
- В строках 14 - 15: проверяем введенное пользователем числа на четность, с помощью логического оператора ветвления
Похожую программу мы делали, когда изучали цикл while,
и там мы вам сказали, что с помощью цикла do while
эту задачу можно решить быстрее. В се дело в том, что в цикле while
нам нужно сразу проверять условие, а здесь мы как бы делаем одну итерацию без проверки условия.
Но есть и минус использования цикла do while
в нашем примере:
- Дело в том, что если пользователь в самом начале введет число -1, то в нашем случае мы не проверим его (на число -1) и продолжим проверять числа на четность дальше.
Как создать бесконечный цикл do while
В цикле do while
, как и в других циклах, присутствует возможность создавать бесконечный цикл.
Если вы не знаете что такое бесконечный цикл, то мы сейчас вам напомним. Бесконечный цикл - это цикл как наверно понятно с названия бесконечный, что значит он никогда не закончится, только если не использовать оператор break
. На примере ниже вы можете увидеть, что цикл do while никогда не закончится, так как переменная a всегда будет равна 1:
int a = 0;
do {
} while (a != 5);
Обычно создание бесконечных циклов в программе является ошибкой программиста. Но иногда нам все таки нужно в своей программе применить бесконечный цикл.
С помощью цикла do while создаем простую игру
Давайте попробуем создать такую игру, чтобы в ней мы смогли раскрыть все сильные стороны использования цикла do while
.
Смысл игры будет заключаться в следующем:
- Пользователь сообщит компьютеру о диапазоне чисел , из которых компьютер может выбрать случайное себе число. Самое маленькое число в диапазоне должно быть не меньше 1, а самое большое число не больше 9.
- Дальше компьютер выберет 2 числа из диапазона. Из этих двух чисел он создаст двухзначное число.
- Наша задача будет заключаться в следующем - нам нужно найти число, которое создал компьютер.
Но чтобы мы не потратили много времени на поиск числа, компьютер будет нам помогать. Если мы ввели компьютеру число, то он сможет нам ответить вот такими фразами:
- Число больше истинного.
- Число меньше истинного.
- Поздравляем, это правильный ответ!
Внизу находится реализация данной задачи:
#include <iostream>
#include <ctime>
#include <stdlib.h>
using namespace std;
int main() {
setlocale(0, "");
int l, r; // начало диапазона - конец диапазона
cout << "Введите диапазон чисел (1 - 9): "; cin >> l >> r;
srand(time(0));
int a = l + rand() % (r - l + 1); // компьютер выбирает
int b = l + rand() % (r - l + 1); // случайные числа
int full_digital = a * 10 + b; // создаем двухзначное число
int your_digital; // переменная, в которой будет храниться числа пользователя
cout << "Введите свое число: ";
bool flag = false; // создали булеву переменную
do {
if (your_digital > full_digital && flag == true) {
cout << "Мое число меньше " << your_digital << endl;
cout << "Давайте попробуем еще раз."
}
if (your_digital < full_digital && flag == true) {
cout << "Мое число больше " << your_digital << endl;
cout << "Давайте попробуем еще раз."
}
flag = true;
cout << " Введите свое число " << endl;
cin >> your_digital;
} while (your_digital != full_digital);
cout << "Поздравляем, ты угадал число!";
system("pause");
return 0;
}
По коду вам должно быть все понятно, кроме наверно одного. Мы в своей программе использовали булеву переменную, которую создали в строке 23. Мы ее создали чтобы операторы ветвления в строках 26-33 не срабатывали.
Закрепление цикла do while в C++
Чтобы вам запомнить данный цикл, создайте у себя в программе цикл do while
, который должен вывести сообщение “Ура! Теперь я знаю как работает цикл do while
!” три раза.
Если у вас есть вопрос по данной теме, вы можете оставить свой комментарий ниже у нас на сайте. Нам будет приятно, если вы поделитесь этим уроком с вашими друзьями. Удачи!
Если хотите всегда быть в курсе последних новостей в мире программирования и IT, подписываетесь на мой Telegram-канал, где я делюсь свежими статьями, новостями и полезными советами. Буду рад видеть вас среди подписчиков!
Обсуждение