JavaRush /Курсы /C# SELF /Цикл while: знакомство и нюансы работы

Цикл while: знакомство и нюансы работы

C# SELF
4 уровень , 1 лекция
Открыта

1. Введение

В программировании регулярно приходится выполнять одни и те же действия много раз подряд. Например:

  • Пройтись по всем элементам списка.
  • Считать с клавиатуры значения, пока пользователь не введет нужное.
  • Считать сумму всех чисел от 1 до 100.
  • Запрашивать у пользователя пароль до тех пор, пока он не станет правильным.

Если попытаться всё это реализовать без циклов, получится длинно, скучно и не масштабируемо. Представьте, что вы пишете программу-калькулятор и решаете складывать числа от 1 до 10 вручную:

int sum = 0;
sum += 1;
sum += 2;
sum += 3;
// ... и так 10 раз. Мда.
Ручное повторение без цикла — неудобно!

Вы заскучаете раньше, чем закончите! Решение — циклы. Они позволяют описать повторение действий лаконично и понятно. Сегодня мы познакомимся с самым базовым, но чертовски полезным циклом — while.

2. Знакомство с циклом while

Синтаксис и базовая схема

Цикл while — это "попугай" в мире программирования: он повторяет один и тот же фрагмент кода до тех пор, пока выполняется некое условие. Как только условие перестаёт быть истинным, попугай замолкает (цикл заканчивается).


while (условие)
{
    // Тело цикла
}
Запись цикла while с блоком команд

Диаграмма

Вот простая блок-схема для понимания работы цикла while:

uml-while

3. Примеры: цикл while в действии

Классический счетчик

Сделаем простую программу, которая считает от 1 до 5 и выводит числа:

int i = 1;
while (i <= 5)
{
    Console.WriteLine($"Шаг № {i}");
    i++; // Не забудьте увеличить счетчик!
}
// Выведет:
// Шаг № 1
// Шаг № 2
// Шаг № 3
// Шаг № 4
// Шаг № 5

Обратите внимание: если забыть увеличить переменную i, цикл никогда не завершится (наш попугай станет бессмертным и вечным повторятелем). Это называется бесконечный цикл — пугающая штука.

Ввод с клавиатуры до нужного значения

Нередко цикл используется для того, чтобы "дожимать" пользователя до верного ответа:

string password = "";
while (password != "qwerty")
{
    Console.Write("Введите пароль: ");
    password = Console.ReadLine();
}
Console.WriteLine("Добро пожаловать!");

Здесь программа просит ввести пароль, пока вы не напечатаете магическое "qwerty". Не забудьте: если удалить строку password = Console.ReadLine();, цикл снова станет бесконечным (будет спрашивать пароль, но не будет читать ввод — залипнет навсегда, как сломавшийся робот).

4. Виды и сценарии использования цикла while

Обычный цикл while

Этот цикл, как было показано выше, интересуется условием до первой итерации. Если условие ложно сразу — тело цикла не выполнится ни разу.

Пример: условие не выполняется сразу

int i = 10;
while (i < 5)
{
    Console.WriteLine(i); // Не выполнится никогда!
}

Что, собственно говоря, логично. Именно так, как тут и написано.

Вложенные циклы while

Иногда нужно сделать цикл внутри цикла. Например, перебрать все строки, и в каждой из них проверить все символы. На данном этапе это скорее авантюра, но вот пример по-простому:

int i = 1;
while (i <= 3)
{
    int j = 1;
    while (j <= 2)
    {
        Console.WriteLine($"i = {i}, j = {j}");
        j++;
    }
    i++;
}

// i = 1, j = 1
// i = 1, j = 2
// i = 2, j = 1
// i = 2, j = 2
// i = 3, j = 1
// i = 3, j = 2

Подробнее мы разберем вложенные циклы через пару лекций, просто хотел вас попугать :)

Бесконечный цикл

Иногда циклы завершаются, а иногда — живут вечно.

while (true)
{
    Console.WriteLine("Я вечен!");
}

Используется редко, обычно для каких-нибудь фоновых процессов (например, работа сервера), но тоже применяется на практике.

5. Как не писать глупости: частые ошибки с while

В программировании цикл — это как электричество: классно, но надо знать правила безопасности.

Проблема 1: бесконечный цикл по невнимательности

Очень часто новички забывают обновлять переменную, от которой зависит условие. В результате цикл работает "бесконечно", и приходится останавливать программу принудительно (например, сочетанием Ctrl + C).

int i = 1;
while (i <= 5)
{
    Console.WriteLine(i);
    // i++;  // ОЙ! Забыли увеличить i
}

Проблема 2: неверно заданное условие

Иногда разработчик сам себе роет яму: условие, наоборот, никогда не бывает истинным. В результате цикл не выполняется вообще.

int i = 10;
while (i < 5)
{
    Console.WriteLine(i); // Данный код никогда не сработает.
    i++;
}

Проблема 3: ошибка с типами данных

В условии цикла всегда должно быть булево выражение — то есть результат вычислений должен быть true или false.

int number = 5;
while (number) // Ошибка! Ожидался bool, а не int.
{
    number--;
}
2
Задача
C# SELF, 4 уровень, 1 лекция
Недоступна
Вывод чисел от 1 до 10
Вывод чисел от 1 до 10
2
Задача
C# SELF, 4 уровень, 1 лекция
Недоступна
Сумма чисел до заданного предела
Сумма чисел до заданного предела
Комментарии (7)
ЧТОБЫ ПОСМОТРЕТЬ ВСЕ КОММЕНТАРИИ ИЛИ ОСТАВИТЬ КОММЕНТАРИЙ,
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ
Irina Freedom Уровень 6
22 декабря 2025
Почему в таблице "Ручное повторение без цикла — неудобно!" переменные с одним плюсом, а не с двумя? В таблице - int sum +=1 А разве не надо int sum ++ =1?
Juni Уровень 5
27 ноября 2025
Почему в этой задаче нужно использовать вот это if (int.TryParse(Number, out N)). Такое в курсе не давали.. спасибо з бонусные знания, конечно, но было бы не плохо последовательно давать такую информацию..
Александр Уровень 4
14 ноября 2025
При проверке выдаёт сообщение: "Проверять ввод на null и некорректные форматы (например, using int.TryParse) вместо Convert.ToInt32, и давать пользователю понятное сообщение об ошибке. Сейчас программа не обрабатывает случай нечислового ввода и выбросит исключение при Convert.ToInt32(null) или при вводе нечисловой строки." какой еще int.TryParse ? в прошлых лекциях и задачах вообще такой метод не обсуждался даже
Александр Уровень 4
14 ноября 2025
Я так подозреваю, надо использовать проверку через if, НО в условиях и требованиях об этом не говорится
Александр Уровень 4
14 ноября 2025
Просто не понятно, с одной стороны задачи требуют максимальной точности (например точку или запятую пропустил в строковом значении из условия и всё, код не проходит проверку) а с другой стороны "эээ нет брат, давай ка мозгами пораскинь и вспомни что проходил". На счёт второго я только за, но можно же хотя-бы намекнуть в какую сторону копать.
Александр Уровень 4
14 ноября 2025
в итоге проблема вообще была не вводе данных от пользователя, а в текущем значении, у меня оно было "1" а нужно было "0"(т.к. в первой итерации цикла оно сразу будет 1, чего и требует условие). Но почему "ругалось" именно на первый пункт требования, я так и не понял. Если необходимо, скину код
Александр Уровень 22
15 сентября 2025
вторая задачка наконец интересная