Циклы while и do-while в C++: освоение повторений в коде
Циклы while и do-while в C++: освоение повторений в коде
Это руководство объясняет циклы while и do-while в C++ с наглядными примерами, блок-схемами и лучшими практиками.
Циклы — краеугольный камень эффективного программирования: они позволяют выполнять блок кода многократно без дублирования строк. Будь то итерация по диапазону или ожидание пользовательского ввода, выбор правильного типа цикла критически важен для читаемого, поддерживаемого кода.
В C++ есть три основных конструкции циклов:
for— идеален, когда число итераций известно заранее.while— выполняется, пока условие остается истинным.do…while— гарантирует как минимум одно выполнение перед проверкой условия.
Цикл for рассматривался в предыдущем уроке, эта статья фокусируется на while и do…while, детально разбирая синтаксис, поток выполнения, частые ошибки и реальные сценарии использования.
Цикл while в C++
Синтаксис цикла while прост:
while (condition) {
// тело цикла
}
Цикл вычисляет condition перед каждой итерацией:
- Если
condition—true, выполняется тело цикла. - Условие пересчитывается после завершения тела.
- Процесс повторяется, пока
conditionне станетfalse, после чего цикл завершается.
Для глубокого понимания операторов отношения и логических операторов C++ обратитесь к руководству.
Блок-схема цикла while

Пример 1: вывод чисел от 1 до 5
// Программа для печати чисел от 1 до 5
#include <iostream>
using namespace std;
int main() {
int i = 1;
// цикл while от 1 до 5
while (i <= 5) {
cout << i << " ";
++i;
}
return 0;
}
Результат
1 2 3 4 5
Пошаговый разбор выполнения:
| Итерация | Переменная | i <= 5 | Действие |
|---|---|---|---|
| 1-я | i = 1 | true | 1 выведено, i становится 2 |
| 2-я | i = 2 | true | 2 выведено, i становится 3 |
| 3-я | i = 3 | true | 3 выведено, i становится 4 |
| 4-я | i = 4 | true | 4 выведено, i становится 5 |
| 5-я | i = 5 | true | 5 выведено, i становится 6 |
| 6-я | i = 6 | false | Цикл завершается |
Пример 2: сумма только положительных чисел
// программа для нахождения суммы положительных чисел
// если пользователь вводит отрицательное число, цикл завершается
// отрицательное число не добавляется к сумме
#include <iostream>
using namespace std;
int main() {
int number;
int sum = 0;
// ввод от пользователя
cout << "Enter a number: ";
cin >> number;
while (number >= 0) {
// суммируем все положительные числа
sum += number;
// снова запрашиваем ввод, если число положительное
cout << "Enter a number: ";
cin >> number;
}
// вывод суммы
cout << "\nThe sum is " << sum << endl;
return 0;
}
Результат
Enter a number: 6 Enter a number: 12 Enter a number: 7 Enter a number: 0 Enter a number: -2 The sum is 25
В примере программа продолжает запрашивать числа. Пока вводимое число неотрицательно, оно добавляется к sum. Отрицательный ввод сигнализирует о конце цикла, и выводится итоговая сумма.
Цикл do…while в C++
Цикл do…while отличается от while тем, что выполняет тело как минимум один раз перед проверкой условия. Это полезно, когда тело цикла должно выполниться до того, как можно проверить условие выхода.
Его синтаксис:
do {
// тело цикла
} while (condition);
Поток выполнения:
- Тело выполняется.
- Условие вычисляется.
- Если
true, тело повторяется. - Процесс продолжается, пока условие не станет
false.
Блок-схема цикла do…while

Пример 3: вывод чисел от 1 до 5
// Программа для печати чисел от 1 до 5
#include <iostream>
using namespace std;
int main() {
int i = 1;
// do…while цикл от 1 до 5
do {
cout << i << " ";
++i;
} while (i <= 5);
return 0;
}
Результат
1 2 3 4 5
Шаги выполнения:
| Итерация | Переменная | i <= 5 | Действие |
|---|---|---|---|
| Начальная | i = 1 | Ещё не проверялось | 1 выведено, i становится 2 |
| 1-я | i = 2 | true | 2 выведено, i становится 3 |
| 2-я | i = 3 | true | 3 выведено, i становится 4 |
| 3-я | i = 4 | true | 4 выведено, i становится 5 |
| 4-я | i = 5 | true | 5 выведено, i становится 6 |
| 5-я | i = 6 | false | Цикл завершается |
Пример 4: сумма только положительных чисел
// программа для нахождения суммы положительных чисел
// если пользователь вводит отрицательное число, цикл завершается
// отрицательное число не добавляется к сумме
#include <iostream>
using namespace std;
int main() {
int number = 0;
int sum = 0;
do {
sum += number;
// ввод от пользователя
cout << "Enter a number: ";
cin >> number;
} while (number >= 0);
// вывод суммы
cout << "\nThe sum is " << sum << endl;
return 0;
}
Результат 1
Enter a number: 6 Enter a number: 12 Enter a number: 7 Enter a number: 0 Enter a number: -2 The sum is 25
Результат 2
Enter a number: -6 The sum is 0.
Когда первый ввод отрицательный, цикл выполняется один раз и сразу завершается, оставляя sum неизменным.
Бесконечные циклы
Бесконечный цикл возникает, когда условие никогда не становится false. Это может быть намеренно (например, сервер, работающий вечно) или случайно (логические ошибки).
// бесконечный while цикл
while (true) {
// тело цикла
}
Аналогично, do…while может быть бесконечным:
int count = 1;
do {
// тело цикла
} while (count == 1);
Такие циклы потребляют ресурсы до завершения программы или исчерпания памяти.
for против while
Цикл for наиболее подходит, когда число итераций известно заранее:
// цикл выполняется 5 раз
for (int i = 1; i <= 5; ++i) {
// тело цикла
}
Напротив, while и do…while идеальны, когда число итераций зависит от данных во время выполнения, таких как пользовательский ввод или результат сложного условия.
Изучите больше примеров циклов C++:
- C++ Программа для отображения ряда Фибоначчи
- C++ Программа для нахождения НОД
- C++ Программа для нахождения НОК
Язык C
- Классы и объекты в C++: практическое руководство по объектно-ориентированному программированию
- Управление памятью в C++: экспертное использование new и delete
- Публичное, защищённое и приватное наследование в C++: подробный разбор
- Дружественные функции и классы в C++: мастерство контроля доступа
- Цикл do-while в C++: синтаксис, примеры и вложенные циклы
- Циклы while и do-while: наглядное сравнение с практическими примерами
- Java-проверка чисел-палиндромов: алгоритмы с while и for циклами
- Полное руководство по дате и времени в C++
- Перегрузка в C++: функции и операторы — подробное руководство
- Ввод-вывод в файлы в C++: чтение и запись с fstream