Цикл while и do-while в C# (.NET 6): подробное руководство
Цикл while и do-while в C#
Что такое цикл и зачем он нужен?
Представь, что тебе нужно 100 раз написать в тетради: «Я буду учить программирование». Скучно и долго, правда? В программировании такие повторяющиеся действия выполняют циклы.
Цикл — это конструкция, которая заставляет программу выполнять одну и ту же команду (или несколько команд) много раз, пока выполняется определённое условие.
В этом уроке мы познакомимся с двумя видами циклов: while и do-while. Они похожи, но есть одно важное отличие. Поехали!
Цикл while
Цикл while работает так: сначала проверяет условие, и если оно истинно — выполняет команды. Затем снова проверяет условие — и так до тех пор, пока условие не станет ложным.
// Синтаксис
while (условие)
{
// Команды, которые повторяются
}
Пример 1: Робот собирает кристаллы, пока энергия меньше 100.
int energy = 0;
while (energy < 100)
{
Console.Write("Сколько энергии даёт кристалл? ");
int crystal = Convert.ToInt32(Console.ReadLine());
energy = energy + crystal;
Console.WriteLine($"Энергия: {energy}");
}
Console.WriteLine("Сумка полна! Робот возвращается.");
Пример 2: Обратный отсчёт от 5 до 1.
int count = 5;
while (count > 0)
{
Console.WriteLine(count);
count = count - 1; // Уменьшаем счётчик
}
Console.WriteLine("Пуск!");
Цикл do-while
Цикл do-while работает чуть иначе: сначала он ВЫПОЛНЯЕТ команды, а потом проверяет условие. Это значит, что команды внутри цикла выполнятся хотя бы один раз, даже если условие сразу ложное.
// Синтаксис
do
{
// Команды, которые повторяются
} while (условие);
Пример 3: Секретный агент вводит код доступа. Если код неверный — просит ввести снова. Но хотя бы один раз он точно введёт.
string code;
do
{
Console.Write("Введите секретный код: ");
code = Console.ReadLine();
if (code != "007")
Console.WriteLine("Неверный код! Попробуйте ещё раз.");
} while (code != "007");
Console.WriteLine("Доступ разрешён!");
Важное отличие while и do-while
- while — сначала проверка, потом действие. Если условие сразу ложно, команды не выполнятся ни разу.
- do-while — сначала действие, потом проверка. Команды выполнятся хотя бы один раз.
Пример 4: Сравним. Условие ложно с самого начала.
int x = 10;
Console.WriteLine("Цикл while:");
while (x < 5)
{
Console.WriteLine("Эта строка не выведется");
}
Console.WriteLine("Цикл do-while:");
do
{
Console.WriteLine("А эта выведется один раз!");
} while (x < 5);
Разбор типичных задач
Задача «Юный садовод»
Алекс посадил росток. Каждый день он увеличивается в 2 раза. Начальная высота — 10 см. Алекс хочет узнать, через сколько дней росток станет выше 100 см.
double height = 10;
int days = 0;
while (height <= 100)
{
days = days + 1;
height = height * 2;
Console.WriteLine($"День {days}: высота {height} см");
}
Console.WriteLine($"Росток стал выше 100 см через {days} дней!");
Задача «Волшебная экспедиция»
Артефакт светится. Каждую секунду его сила увеличивается на 5 единиц. Начальная сила — 20. Нужно дождаться, пока сила станет ровно 100 или больше.
int power = 20;
int seconds = 0;
while (power < 100)
{
Console.WriteLine($"Секунда {seconds}: сила артефакта {power}");
power = power + 5;
seconds = seconds + 1;
}
Console.WriteLine($"Артефакт активирован! Сила: {power}, прошло секунд: {seconds}");
Частые ошибки новичков
- Бесконечный цикл. Если забыть изменить переменную в условии, цикл никогда не закончится.
int i = 0; while (i < 5) { Console.WriteLine("Бесконечность!"); // i не меняется! } - Путаница между while и do-while. Если нужно, чтобы действие выполнялось хотя бы один раз — используй
do-while. Если действие может не понадобиться — используйwhile. - Забывание точки с запятой после do-while. В конце
do-whileобязательно ставится;. - Неправильное условие. Например, вместо
while (energy < 100)написалиwhile (energy <= 100). Разница в том, что во втором случае цикл выполнится, если энергия равна 100, а в первом — нет.
Итоговый пример решения похожей задачи
Задача «Робот-шахтёр»: Робот сканирует кристаллы. Каждый кристалл даёт от 10 до 30 единиц энергии (вводим с клавиатуры). Нужно собирать, пока энергия не станет 100 или больше. Вывести итоговую энергию и количество собранных кристаллов.
int totalEnergy = 0;
int crystalsCount = 0;
Console.WriteLine("Робот-шахтёр начал работу!");
while (totalEnergy < 100)
{
Console.Write("Введите энергию найденного кристалла (10-30): ");
int crystalEnergy = Convert.ToInt32(Console.ReadLine());
totalEnergy = totalEnergy + crystalEnergy;
crystalsCount = crystalsCount + 1;
Console.WriteLine($"Собрано кристаллов: {crystalsCount}, общая энергия: {totalEnergy}");
}
Console.WriteLine($"Работа завершена! Собрано {crystalsCount} кристаллов, общая энергия: {totalEnergy}");
Коротко о главном
- while — проверяет условие ДО выполнения. Подходит, когда действие может не понадобиться.
- do-while — выполняет действие, потом проверяет. Гарантирует хотя бы одно выполнение.
- Не забывай изменять переменную в условии, чтобы цикл не стал бесконечным.
- Используй циклы, чтобы автоматизировать повторяющиеся действия — как настоящий программист!