while loop
Выполняет statement повторно, до тех пор, пока значение expression не станет равным нулю. Проверка происходит перед каждой итерацией.
Содержание |
Синтаксис
attr-spec-seq
(необязательно)
while (
expression
)
statement
|
|||||||||
| expression | - | любое выражение скалярного типа. Это выражение вычисляется перед каждой итерацией, и если оно равно нулю, цикл завершается. |
| statement | - | любой оператор , обычно составной оператор, который служит телом цикла |
| attr-spec-seq | - | (C23) опциональный список атрибутов , применяемых к оператору цикла |
Объяснение
Оператор
while
вызывает повторное выполнение
statement
(также называемого
телом цикла
) до тех пор, пока
expression
(также называемое
управляющим выражением
) не станет равным нулю. Повторение происходит независимо от того, выполняется ли тело цикла обычным способом или с помощью
goto
внутрь
statement
.
Вычисление expression происходит перед каждым выполнением statement (если только не было перехода через goto). Если управляющее выражение должно вычисляться после тела цикла, можно использовать цикл do-while .
Если выполнение цикла необходимо прервать в определенный момент, break statement может быть использован в качестве завершающей инструкции.
Если выполнение цикла необходимо продолжить в конце тела цикла, оператор continue может быть использован в качестве сокращения.
Программа с бесконечным циклом имеет неопределённое поведение, если цикл не имеет наблюдаемого поведения (ввод-вывод, доступ к volatile, атомарные или синхронизационные операции) ни в одной части своего statement или expression . Это позволяет компиляторам оптимизировать все ненаблюдаемые циклы без доказательства их завершения. Единственными исключениями являются циклы, где expression является константным выражением; while ( true ) всегда является бесконечным циклом.
|
Как и все другие операторы выбора и итерации, оператор while устанавливает область видимости блока : любой идентификатор, введенный в выражении , выходит из области видимости после оператора . |
(since C99) |
Примечания
Логические и указательные выражения часто используются в качестве управляющих выражений циклов. Логическое значение
false
и нулевое значение указателя любого типа сравниваются с нулём.
Ключевые слова
Пример
#include <stdio.h> #include <stdlib.h> #include <string.h> enum { SIZE = 8 }; int main(void) { // тривиальный пример int array[SIZE], n = 0; while(n < SIZE) array[n++] = rand() % 2; puts("Array filled!"); n = 0; while(n < SIZE) printf("%d ", array[n++]); printf("\n"); // классическая реализация strcpy() // (копирует нуль-терминированную строку из src в dst) char src[] = "Hello, world", dst[sizeof src], *p = dst, *q = src; while((*p++ = *q++)) // двойные скобки (которые не строго необходимы) // используются для подавления предупреждений, гарантируя, что это // присваивание (в отличие от сравнения) по намерению, // чей результат используется как логическое значение ; // пустой оператор puts(dst); }
Вывод:
Array filled! 1 0 1 1 1 1 0 0 Hello, world
Ссылки
- Стандарт C17 (ISO/IEC 9899:2018):
-
- 6.8.5.1 Оператор while (стр: 109)
- Стандарт C11 (ISO/IEC 9899:2011):
-
- 6.8.5.1 Оператор while (стр. 151)
- Стандарт C99 (ISO/IEC 9899:1999):
-
- 6.8.5.1 Оператор while (стр: 136)
- Стандарт C89/C90 (ISO/IEC 9899:1990):
-
- 3.6.5.1 Оператор while
Смотрите также
|
Документация C++
для
while
цикла
|