Цикл 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;
}

Давайте тщательно разберем данный пример:

  1. В строке 3: объявили переменную chislo. В этой переменной мы будем хранить все числа, которые пользователь будет вводить.
  2. В строке 5 - 6: сообщаем пользователю правила игры.
  3. В строке 10: считываем первое число пользователя в переменную chislo.
  4. В строке 12: объявили цикл do while. Давайте поподробнее разберемся, что происходит у него внутри:
    • В строках 14 - 15: проверяем введенное пользователем числа на четность, с помощью логического оператора ветвления if-else.
    • В строке 17: снова считываем введенное число.
    • В строке 19: проверяем условие цикла. В качестве логического выражение chislo != -1. Если пользователь ввел число -1, то цикл сразу же прекратит свою работу.

Похожую программу мы делали, когда изучали цикл 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!” три раза.

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

« Указатели в C++

Область видимости в C++ »

Обсуждение