Spec-Zone.ru › C

Цикл while

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

Синтаксис

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

Объяснение

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

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

Если выполнение цикла нужно прервать в какой-то момент, можно использовать оператор break.

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

Программа с бесконечным циклом имеет неопределенное поведение, если цикл не имеет наблюдаемого поведения (ВВОД/ВЫВОД, доступ к переменным volatile, атомарные или синхронизирующие операции) ни в одной части его statement или expression. Это позволяет компиляторам оптимизировать все ненаблюдаемые циклы без доказательства их завершения. Исключением являются циклы, где expression является константным выражением; while(true) всегда является бесконечным циклом.

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

(с C99)

Примечания

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

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

while

Пример

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
enum { SIZE = 8 };
int main(void)
{
    // trivial example
    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");
 
    // classic strcpy() implementation
    // (copies a null-terminated string from src to dst)
    char src[] = "Hello, world", dst[sizeof src], *p = dst, *q = src;
    while((*p++ = *q++)) // double parentheses (that are not strictly necessary)
                         // used to suppress warnings, ensuring that this is an
                         // assignment (as opposed to a comparison) by intention,
                         // whose result is used as a truth value
        ; // null statement
    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 цикла

© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/w/c/language/while

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API