Конструкція while складається з блоку коду та умови/виразу[1].
Умова/вираз оцінюється, і якщо умова/вираз істинне,[1] виконується код у межах усіх наступних у блоці. Це повторюється, доки умова/вираз не стане false. Оскільки цикл while перевіряє умову/вираз перед виконанням блоку, структуру керування часто також називають циклом з передумовою . Порівняйте це з циклом do while, який перевіряє умову/вираз після виконання циклу.
Наприклад, у мовах C, Java, C#,[2]Objective-C і C++ (які в цьому випадку використовують однаковий синтаксис), фрагмент коду
intx=0;while(x<5){printf("x = %d\n",x);x++;}
спочатку перевіряє, чи x менший за 5, а це так, а потім вводиться {тіло циклу}, де виконується функція printf і x збільшується на 1. Після виконання всіх операторів у тілі циклу умова (x < 5) перевіряється знову, і цикл виконується знову, цей процес повторюється, доки змінна x не матиме значення 5.
Можливо, а в деяких випадках і бажано, щоб умова завжди оцінювалася як істинна, створюючи нескінченний цикл. Коли такий цикл створюється навмисно, зазвичай існує інша керуюча структура (наприклад, оператор break), яка керує завершенням циклу. Наприклад:
while(true){// do complicated stuffif(someCondition)break;// more stuff}
Демонстрація циклів while
Наведені приклади різними мовами програмування демонструють розрахунок факторіалу числа 5 із використанням циклу while.
counter=5' Counter = 5factorial=1' initial value of variable "factorial"Whilecounter>0factorial=factorial*countercounter=counter-1TextWindow.WriteLine(counter)EndWhile
Visual Basic
DimcounterAsInteger=5' init variable and set valueDimfactorialAsInteger=1' initialize factorial variableDoWhilecounter>0factorial=factorial*countercounter=counter-1Loop' program goes here, until counter = 0'Debug.Print factorial ' Console.WriteLine(factorial) in Visual Basic .NET
program FactorialProginteger::counter=5integer::factorial=1do while(counter>0)factorial=factorial*countercounter=counter-1end do print*,factorialend program FactorialProg
Pascal має дві форми циклу while: while і repeat. While повторює один оператор (якщо він не укладений у блок begin-end), доки умова є істинною. Інструкція repeat повторно виконує блок з одного або кількох операторів через оператор until і продовжує повторюватися, якщо умова не є помилковою. Основна відмінність між ними полягає в тому, що цикл while може виконуватися нуль разів, якщо умова початково хибна, цикл repeat-until завжди виконується принаймні один раз.
programFactorial1;varFv:integer;procedurefact(counter:integer);varFactorial:integer;beginFactorial:=1;whileCounter>0dobeginFactorial:=Factorial*Counter;Counter:=Counter-1end;WriteLn(Factorial)end;beginWrite('Enter a number to return its factorial: ');readln(fv);repeatfact(fv);Write('Enter another number to return its factorial (or 0 to quit): ');untilfv=0;end.
Цикли While часто використовуються для читання даних рядок за рядком (як визначено роздільником рядків $/) із відкритих дескрипторів файлів:
counter=5# Set the value to 5factorial=1# Set the value to 1whilecounter>0:# While counter(5) is greater than 0factorial*=counter# Set new value of factorial to counter.counter-=1# Set the counter to counter - 1.print(factorial)# Print the value of factorial.