🔷 C#

Цикл 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}");

Частые ошибки новичков

  1. Бесконечный цикл. Если забыть изменить переменную в условии, цикл никогда не закончится.
    int i = 0;
    while (i < 5)
    {
        Console.WriteLine("Бесконечность!"); // i не меняется!
    }
  2. Путаница между while и do-while. Если нужно, чтобы действие выполнялось хотя бы один раз — используй do-while. Если действие может не понадобиться — используй while.
  3. Забывание точки с запятой после do-while. В конце do-while обязательно ставится ;.
  4. Неправильное условие. Например, вместо 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 — выполняет действие, потом проверяет. Гарантирует хотя бы одно выполнение.
  • Не забывай изменять переменную в условии, чтобы цикл не стал бесконечным.
  • Используй циклы, чтобы автоматизировать повторяющиеся действия — как настоящий программист!