do...while

Цикл do...while гарантирует хотя бы одно выполнение тела, а затем проверяет условие — удобно для опроса датчиков или ожидания ввода.

Полная статья

Описание

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

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

Синтаксис

    do {
      // блок операторов
    } while (condition);

Параметры

condition: логическое выражение, результат которого равен true или false. Пока оно истинно, цикл продолжается. Как только становится ложным — выполнение переходит к следующей строке после цикла.

Пример кода

    // инициализация x и i значением 0
    int x = 0;
    int i = 0;

    do {
      delay(50);          // ожидание стабилизации датчиков
      x = readSensors();  // считывание показаний датчиков
      i++;                // увеличение i на 1
    } while (i < 100);    // повторить 100 раз

Где применяется

  • Ожидание пользовательского ввода — когда нужно хотя бы раз прочитать данные с кнопки или сенсора, прежде чем проверять условие.
  • Меню и диалоги — показать пункты меню один раз, а потом повторять, пока не выбран правильный вариант.
  • Инициализация с проверкой — выполнить попытку подключения к устройству и повторять её, если устройство не ответило.
  • Опрос датчика до получения стабильного значения — считать показание и повторять, пока оно не попадёт в допустимый диапазон.

Практические замечания

  • Не забывайте точку с запятой после закрывающей скобки условия: while (condition); — это обязательная часть синтаксиса do...while, без неё скетч не скомпилируется.
  • Если условие всегда остаётся true, цикл станет бесконечным и заблокирует выполнение остального кода. Убедитесь, что внутри тела цикла что-то изменяет переменные, влияющие на condition.
  • do...while удобен именно тогда, когда первое выполнение тела цикла необходимо для получения данных, которые затем проверяются в условии — например, чтение с Serial или опрос кнопки.
  • Если тело цикла должно выполниться ноль или более раз (то есть может не выполниться вовсе), используйте обычный while вместо do...while.

Полезные материалы