do-while loop
Выполняет 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 ) ; всегда является бесконечным циклом.
|
Как и все остальные операторы выбора и итерации, оператор
|
(начиная с C99) |
Примечания
Логические и указательные выражения часто используются в качестве управляющих выражений циклов. Логическое значение false и нулевое значение указателя любого типа сравниваются с нулём.
Ключевые слова
Пример
#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
цикла
|