Приглядевшись к синтаксису оператора
while,
вы можете обнаружить потенциальную проблему.
Булевское_выражение
вычисляется до исполнения
встроенного ^оператора.
Поэтому в предыдущем примере приходится инициализировать переменные
correctGuess
и
userQuit
значением
false,
встроенный оператор
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.
Однако поскольку можно легко управлять входом в цикл, инициализируя булевскую переменную, выбор того или иного оператора — дело вкуса.