Оператор while

Оператор while используется в том случае, когда количество итераций заранее неизвестно. Существуют две формы оператора: префиксная и постфиксная. В префиксной форме его синтаксис таков:

while (<Условие>)

<Тело_цикла>

Здесь <while> — зарезервированное слово; <Выражение> — выражение типа bool; <Тело_цикла> — произвольный оператор или блок операторов.

Постфиксная форма:

do

<Тело_цикла>

while (<Условие>)

Таким образом, в префиксной форме сначала проверятся истинность условия и только после этого выполняется тело цикла, а в постфиксной сначала выполняется тело цикла и лишь потом проверяется условие: если оно истинно тело цикла выполняется заново. В префиксной форме тело цикла может не выполниться ни разу, в то время как в постфиксной оно будет выполнено хотя бы один раз.

Очевидно, что в операторе while проверяемое условие должно изменяться в теле цикла, в противном случае цикл никогда не завершится естественным образом, и программа «зациклится».

В листинге 7.2 приводится пример, демонстрирующий обе формы оператора (файл Ch07\DemoWhile\Program.cs). Во внешнем цикле с постпроверкой формируется диалог с пользователем, во внутреннем используется префиксная форма для определения все того же палиндрома (см. ранее раздел «Оператор for»). В программу внесено небольшое усовершенствование. Фраза «А роза упала на лапу Азора» в предыдущем варианте программы не распознавалась как палиндром, так как в ней есть различие в регистрах символов и присутствуют несимметричные пробелы. Поэтому в новом варианте программы введенная строка преобразуется к верхнему регистру и из нее удаляются все пробелы.

Листинг 7.2. Анализ палиндрома с предварительным преобразованием строки

public static void Main()

{

string answer, text;

do

{

Console.WriteLine("Введите текст:");

text = Console.ReadLine();

text = text.ToUpper(); // Преобразуем регистр символов

while (text.IndexOf(' ') > 0) // Удаляем пробелы

text = text.Remove(text.IndexOf(' '), 1);

int i = 0, j = text.Length - 1;

while ((i<j) && (text[i] == text[j]))

{i++; j--;}

if (text[i] == text[j])

Console.WriteLine(text +" - это палиндром");

else

Console.WriteLine(text +" - это не палиндром");

Console.WriteLine("Продолжим? (yes/no)");

answer = Console.ReadLine();

}

while(answer =="yes");

}

Предлагаю ознакомиться с аналогичными статьями: