1. Знайомство з циклом do-while
Давайте відволічмося на хвилинку й уявімо: ви вирішили написати програму, яка вгадує число, що його загадав користувач. Вам потрібно, щоб програма хоча б один раз запитала в користувача число та питала знову й знову, доки не вгадає. Втім, якщо умова не виконується з першої спроби, звичайний while навіть не зайде в тіло циклу.
Саме тут стане у пригоді цикл do-while. На відміну від while, він завжди виконує тіло циклу принаймні один раз — навіть якщо умова відразу хибна. Це ніби вам дали безкоштовну жуйку незалежно від того, купили ви щось чи ні.
do
{
// Тіло циклу: цей код виконається хоча б один раз
}
while (умова);
Зверніть увагу на крапку з комою ; у кінці після дужки умови! У звичайному while її немає, а тут вона є. Невелика пастка для новачків.
Кроки роботи циклу do-while
- Вхід у тіло циклу (завжди хоча б раз).
- Перевірка умови.
- Якщо умова істинна — повторити тіло.
- Якщо умова хибна — вийти з циклу.
2. Відмінність від звичайного while
Згадайте основний сценарій роботи звичайного while:
while (умова)
{
// Тіло циклу
}
Тіло не виконається жодного разу, якщо умова хибна від самого початку!
Тепер приклад з do-while:
do
{
// Тіло циклу
}
while (умова);
Тіло циклу виконається хоча б один раз, навіть якщо умова одразу хибна!
Давайте проілюструємо різницю кодом:
// Звичайний while
int count = 0;
while (count > 0)
{
Console.WriteLine("count = " + count);
count--;
}
// Нічого не виведеться
// do-while
int count2 = 0;
do
{
Console.WriteLine("count2 = " + count2);
count2--;
}
while (count2 > 0);
// Виведе "count2 = 0" хоча умова хибна!
Іноді це здається «дивиною», проте інколи саме така поведінка рятує ваш код (наприклад, під час користувацького введення та валідації даних).
3. Практичні сценарії використання do-while
Де цей цикл застосовують найчастіше?
Валідація даних
Найпопулярніший сценарій — ви хочете, щоб користувач увів щось коректне (наприклад, лише цифри або пароль не коротший за 6 символів), і повторюєте запит, доки не отримаєте коректне введення.
string password;
do
{
Console.Write("Введіть новий пароль (не менше 6 символів): ");
password = Console.ReadLine();
}
while (password.Length < 6);
Console.WriteLine("Пароль прийнято!");
У цьому прикладі тіло циклу виконується хоча б раз — навіть якщо користувач з першого разу уведе довгий пароль.
Меню в консольних застосунках
Поширений і корисний шаблон: показувати меню, очікувати команду користувача й завершувати цикл лише за спеціальною командою.
string command;
do
{
Console.WriteLine("Меню:");
Console.WriteLine("1. Показати привітання");
Console.WriteLine("2. Вийти");
Console.Write("Виберіть дію: ");
command = Console.ReadLine();
if (command == "1")
{
Console.WriteLine("Привіт, світ!");
}
else if (command != "2")
{
Console.WriteLine("Невідома команда.");
}
}
while (command != "2");
Console.WriteLine("Бувайте!");
4. Порівняння while та інших циклів
| Тип циклу | Перевірка умови | Скільки разів може виконатися тіло | Де доречно |
|---|---|---|---|
| while | До | 0 і більше разів | Коли кількість повторень наперед невідома |
| do-while | Після | 1 і більше разів | Коли потрібно виконати хоча б раз |
| for | До | 0 і більше разів | Коли наперед відома кількість ітерацій |
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ