Namespaces
Variants

do-while loop

From cppreference.net

Выполняет statement повторно до тех пор, пока значение условия expression не станет ложным. Проверка происходит после каждой итерации.

Содержание

Синтаксис

attr-spec-seq  (необязательно) do statement while ( expression ) ;
attr-spec-seq - (C23) необязательный список атрибутов , применяемых к оператору цикла.
statement - любой оператор , обычно составной оператор, который является телом цикла.
expression - любое выражение скалярного типа . Это выражение вычисляется после каждой итерации, и если оно сравнивается с нулём, цикл завершается.

Объяснение

Оператор do - while вызывает повторное выполнение statement (также называемого телом цикла ) до тех пор, пока expression (также называемое управляющим выражением ) не станет равным 0 . Повторение происходит независимо от того, было ли тело цикла введено обычным способом или с помощью goto в середину statement .

Вычисление выражения происходит после каждого выполнения оператора (независимо от того, выполненного обычным способом или с помощью goto ). Если управляющее выражение должно быть вычислено до тела цикла, может использоваться цикл while или цикл for .

Если выполнение цикла необходимо прервать в определенный момент, break statement может быть использован в качестве завершающей инструкции.

Если выполнение цикла необходимо продолжить в конце тела цикла, оператор continue может быть использован как сокращение.

Программа с бесконечным циклом имеет неопределённое поведение, если цикл не имеет наблюдаемого поведения (ввод-вывод, доступ к volatile, атомарные или синхронизационные операции) ни в одной части своего statement или expression . Это позволяет компиляторам оптимизировать все ненаблюдаемые циклы без доказательства их завершения. Единственными исключениями являются циклы, где expression является константным выражением; do { ... } while ( true ) ; всегда является бесконечным циклом.

Как и все остальные операторы выбора и итерации, оператор do-while устанавливает область видимости блока : любой идентификатор, введенный в выражении , выходит из области видимости после оператора.

(начиная с C99)

Примечания

Логические и указательные выражения часто используются в качестве управляющих выражений циклов. Логическое значение false и нулевое значение указателя любого типа сравниваются с нулём.

Ключевые слова

do , while

Пример

#include <stdio.h>
#include <stdlib.h>
enum { SIZE = 8 };
int main(void)
{
    // тривиальный пример
    int array[SIZE], n = 0;
    do array[n++] = rand() % 2; // тело цикла представляет собой единственное выражение
    while(n < SIZE);
    puts("Array filled!");
    n = 0;
    do
    { // тело цикла является составным выражением
        printf("%d ", array[n]);
        ++n;
    } while (n < SIZE);
    printf("\n");
    // цикл из K&R itoa(). Цикл do-while используется
    // потому что всегда есть как минимум одна цифра для генерации
    int num = 1234, i=0;
    char s[10];
    do s[i++] = num % 10 + '0'; // получение следующей цифры в обратном порядке
    while ((num /= 10) > 0);
    s[i] = '\0';
    puts(s);
}

Возможный вывод:

Array filled!
1 0 1 1 1 1 0 0
4321

Ссылки

  • Стандарт C23 (ISO/IEC 9899:2024):
  • 6.8.6.3 Оператор do (стр: 156)
  • Стандарт C17 (ISO/IEC 9899:2018):
  • 6.8.5.2 Оператор do (стр: 109)
  • Стандарт C11 (ISO/IEC 9899:2011):
  • 6.8.5.2 Оператор do (стр. 151)
  • Стандарт C99 (ISO/IEC 9899:1999):
  • 6.8.5.2 Оператор do (стр: 136)
  • Стандарт C89/C90 (ISO/IEC 9899:1990):
  • 3.6.5.2 Оператор do

Смотрите также

Документация C++ для do - while цикла