← Все вопросы

Чем отличаются while, do-while и for в C#?

Задан 11 дней назад298 просмотров2 ответа
6

Только разбираюсь с циклами и запутался: есть while, do-while и for, и все вроде что-то повторяют. В каких случаях брать какой? Слышал, что do-while «выполнится хотя бы раз» — что это значит на практике? И как сделать бесконечный цикл, если он вдруг понадобится?

2 ответа

2
✓ Принятый ответ — помог автору

Все три повторяют код, но отличаются моментом проверки условия и удобством для разных задач.

while — цикл с предусловием. Условие проверяется до тела. Если оно сразу ложно — тело не выполнится ни разу.

int i = 0;
while (i < 3)
{
    Console.WriteLine(i);   // 0, 1, 2
    i++;
}

do-while — цикл с постусловием. Тело выполняется, и только потом проверяется условие. Поэтому тело гарантированно отработает хотя бы один раз, даже если условие изначально ложно.

int n;
do
{
    Console.Write("Введи число > 0: ");
    n = int.Parse(Console.ReadLine());
}
while (n <= 0);   // переспрашиваем, пока не введут корректное

Это идеальный кейс: меню или запрос ввода надо показать минимум один раз, а повторять — по ситуации.

for — тот же while, но с местом для счётчика. Удобен, когда заранее известно число итераций. Всё про счётчик собрано в одной строке: инициализация; условие; шаг.

for (int j = 0; j < 5; j++)
{
    Console.WriteLine(j);   // 0..4
}

Как выбирать:

  • Знаешь, сколько раз крутить (по индексу, по диапазону) — for.
  • Крутишь «пока выполняется условие», число итераций неизвестно — while.
  • То же, но тело надо выполнить хотя бы раз — do-while.

Бесконечный цикл и управление. Иногда нужен цикл «навсегда» с выходом изнутри:

while (true)
{
    var cmd = Console.ReadLine();
    if (cmd == "exit") break;       // выходим из цикла
    if (cmd == "") continue;        // пропускаем итерацию, идём дальше
    Console.WriteLine($"Команда: {cmd}");
}

break полностью прерывает цикл, continue пропускает остаток текущей итерации и переходит к следующей проверке. Без break внутри while(true) программа зависнет — это важно держать в голове.

2

Короткое практическое наблюдение: for и while взаимозаменяемы — for(init; cond; step) это ровно init; while(cond){ ...; step; }. Выбор между ними — вопрос читаемости: если есть явный счётчик, for держит его в одном месте и меньше шансов забыть инкремент (классический баг бесконечного while — забыли i++).

И да, не путай do-while с обычным while: точка с запятой после условия в do-while обязательна, забудешь — получишь ошибку компиляции.

Ваш ответ

Войдите, чтобы ответить на вопрос.
Поддержать проект