Урок №68. Цикл do while

  Юрий  | 

  |

  Обновл. 4 Сен 2021  | 

 74912

 ǀ   15 

Одна интересная вещь в цикле while заключается в том, что если условие цикла изначально равно false, то тело цикла не будет выполняться вообще. Но иногда бывают случаи, когда нужно, чтобы цикл выполнился хотя бы один раз, например, при отображении меню. Для решения этой проблемы C++ предоставляет цикл do while.

Синтаксис do while в языке C++:

do
    тело цикла;
while (условие);

Тело цикла do while всегда выполняется хотя бы один раз. После выполнения тела цикла проверяется условие. Если оно истинно, то выполнение переходит к началу блока do и тело цикла выполняется снова.

Ниже приведен пример использования цикла do while для отображения меню:

Интересно, что переменная choice должна быть объявлена вне блоков do while. Почему так?

Если бы переменная choice была объявлена внутри блока do, то она была бы уничтожена при завершении этого блока еще до проверки условия while. Но нам нужна переменная, которая будет использоваться в условии while, следовательно, переменная choice должна быть объявлена вне блока do.

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

Оценить статью:

Звёзд: 1Звёзд: 2Звёзд: 3Звёзд: 4Звёзд: 5 (374 оценок, среднее: 4,92 из 5)
Загрузка...

Комментариев: 15

  1. ОЛЕГ-777:

    Цикл do while отличная вещь!!! И оператор goto мне очень понравился!!! Например вот я написал программу в которой если введёшь правильный пароль, то узнаешь где находятся сокровища тамплиеров! Пароль и адрес при желании можно поменять в коде программы.

    main.cpp:

    1. Oleg:

      Пример того как писать не стоит. В ВУЗе за такой код неуд. будет и отправят переписывать программу, а на собеседовании как только узнают что пользуетесь goto, то на этом собеседование и закончится.

      1. Светлана:

        100 %, нас предупредили, увидим такое и до свидание на переделку.

      2. Amadeus:

        А не затруднит ли вас дать правильный пример написания кода для подобной задачи? В университете не учусь, не знаю, как писать было бы правильно. Заранее спасибо.

        1. Алексей:

          От себя замечу, что нас в институте тоже били по рукам за использование goto в виду увеличения сложности читабельности кода, поэтому хороший код будет как минимум без использования go to в данном случае!

        2. Aelfheah:

          Можно вместо использования goto в if использовать exit, больше менять ничего не надо)

        3. Rash:

        4. Fant:

  2. metanastis:

    Дана вот такая задача:

    Дана последовательность целых чисел, оканчивающаяся числом −1. Необходимо определить, присутствует ли в последовательности хотя бы одна пара одинаковых «соседних» чисел. Число −1 членом последовательности не является.

    Формат входных данных:

    Вводится не более 215 целых чисел ai (−215≤ai≤215−1; ai≠−1). После последнего числа вводится −1. Гарантируется, что в последовательности есть хотя бы два числа.

    Формат выходных данных:

    Выведите «YES», если условие задачи выполняется, и «NO» в противном случае.

    Решение:

    Вопрос:
    Почему "cin>> b" нужно обязательно вводить в цикле do? а не перед ним ? к примеру таким образом

    ??????????????

    1. Владимир:

      Ну посмотрите сами внимательно — если вы так сделаете, откуда возьмется последовательность? Она и формируется введением нового числа в каждой итерации. Выносите ввод b за цикл — имеете разовый ввод двух чисел, их сравнение, результат флага, его вывод и все, конец программы.

  3. Дмитрий:

    Добрый день! Подскажите, никак не могу догнать, как мне в этом примере организовать проверку деления на 0 ??

    1. Максим:

      Понимаю, что отвечать на комментарий 2-х летней давности тот еще моветон.
      Просто для данной "проблемы" идеально подойдет решение с циклом do while.
      И да, "вдруг кому-то пригодится".

      Вместо строки 61:

      нужно прописать эти строки:

  4. bm0802:

    Пример так себе… вот тот же результат но без do:

    1. Фото аватара Юрий:

      У вас сразу же выполняется проверка choice, прежде чем пользователю предоставится список, чтобы что-то выбрать. Т.е. пользователь еще ничего не выбрал, а вы уже проверяете то, что он ничего не выбрал — это первое действие. Затем вы уже показываете список — это второе действие в вашей программе.

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

      То, что оно работает у вашем примере и без do — то это задание можно реализовать еще проще: через switch, if/else и без while вообще. Напрашивается вопрос, зачем тогда придумали эти циклы while, do/while, for, если всё можно сделать и без них?

      1. Игорь:

        А разве не нужно в данном случае еще и присвоить значение переменной choise? Ведь значеним не инициализированной переменной может быть всякий мусор из памяти, в том числе и 1,2,3 или 4… и тогда произойдет непреднамеренный автовыбор ))

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

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