Поиск

Оператор do/while

Приглядевшись к синтаксису оператора while, вы можете обнаружить потенциальную проблему. Булевское_выражение вычисляется до исполнения встроенного ^оператора. Поэтому в предыдущем примере приходится инициализировать переменные correctGuess и userQuit значением false, чтобы гарантировать вход в цикл. Затем эти переменные применяются, чтобы отслеживать, угадал ли пользователь число или решил выйти. А если мы хотим, чтобы встроенный jonepamop всегда выполнялся хоть раз, не устанавливая переменные искусственно? Для этого и служит оператор do/while, форма которого: do
встроенный оператор while (булевское_выражение)
Поскольку булевское_выражение вычисляется после встроенного^оператора, у нас есть гарантия, что встроенный_оператор будет выполнен хотя бы раз. Теперь наша "угадайка" будет выглядеть так: using System;

class DoWhileApp {
const int MIN = 1;
const Int MAX = 10;
const string QUIT_CHAR = "Q";
public static void MainQ {
Random rnd = new RandomQ;
double correctNumber;
string inputStrlng; int userGuess = -1;
bool userHasNotduit = true;
do
{
correctNumber = rnd.NextDoubleO * MAX;
correctNumber = Math.Round(correctNumber);
Console.Write
("Угадайте число от {0} до {1}...({2} - выход)",
MIN, MAX, QUIT.CHAR); inputString = Console. ReadLineO;
if (0 == string.Compare(inputString, QUIT_CHAR, true))
userHasNotQuit = false; else {
userGuess = inputString.Tolnt32();
Console.WriteLine
("Правильное число {0}\n", correctNumber); }
} while (userGuess l= correctNumber && userHasNotQuit);
if (userHasNotQuit
&& userGuess == correctNumber) {
Console.WriteLine("Поздравляем!");
}
else // Неверный ответ!
{
Console.WriteLine("Может, в следующий раз повезет!");
} }
}

Функционально это приложение аналогично примеру с while. Отличие лишь в управлении циклом. На практике оператор while применяется чаще do/while. Однако поскольку можно легко управлять входом в цикл, инициализируя булевскую переменную, выбор того или иного оператора — дело вкуса.