Условия и циклы в C++: делаем вместе, шаг за шагом
Соберём небольшую программу, которая проверяет число на чётность и выводит таблицу умножения. По пути разберём if, else, for и while в C++17 и увидим, что появляется на экране после каждого шага.

За полчаса вы напишете консольную программу, которая спрашивает у пользователя число, проверяет его через if и печатает для него таблицу умножения циклом for. По ходу вы увидите, что выводит терминал после каждого шага, и научитесь читать сообщения об ошибках компилятора. Всё пишем на C++17 — этого стандарта хватает для примеров, и он есть в любом свежем компиляторе.
Что нужно иметь до начала
Прежде чем набирать код, проверьте, что у вас есть компилятор и вы умеете его запускать. Без этого вы застрянете уже на первом шаге.
- Компилятор C++. На Linux и macOS это обычно
g++илиclang++, на Windows — MinGW-w64, MSYS2 или компилятор из Visual Studio. Проверьте командойg++ --version(илиclang++ --version): в ответ должна прийти строка с номером версии, напримерg++ (GCC) 13.2.0. - Текстовый редактор. Подойдёт любой — VS Code, Sublime, даже Блокнот. Среда разработки не обязательна.
- Терминал, в котором вы можете перейти в папку с файлом командой
cd.
Если g++ --version отвечает «command not found» или «не является внутренней командой» — компилятор не установлен или не прописан в PATH. На Windows проще всего поставить MSYS2 и через него установить пакет mingw-w64-x86_64-gcc. Дальше в статье я использую g++; для clang++ команды те же, меняется только имя.
Шаг 1. Первая программа со вводом
Создайте файл numbers.cpp и наберите в нём код. Он попросит ввести число и просто повторит его — так мы убедимся, что ввод работает.
#include <iostream>
int main() {
int number;
std::cout << "Введите целое число: ";
std::cin >> number;
std::cout << "Вы ввели: " << number << "\n";
return 0;
}
Скомпилируйте и запустите:
g++ -std=c++17 -Wall numbers.cpp -o numbers
./numbers
На Windows запускать нужно numbers.exe вместо ./numbers. Флаг -Wall включает предупреждения — держите его всегда, он ловит опечатки до того, как они станут ошибкой в логике.
Проверка: программа печатает «Введите целое число:», ждёт ввода, вы набираете, например, 7 и жмёте Enter — на экране появляется «Вы ввели: 7». Если так — ввод работает, идём дальше.
Шаг 2. Добавляем условие: чётное или нечётное
Теперь научим программу принимать решение. Чётность проверяется остатком от деления на 2: если number % 2 == 0, число чётное. Оператор % возвращает остаток.
#include <iostream>
int main() {
int number;
std::cout << "Введите целое число: ";
std::cin >> number;
if (number % 2 == 0) {
std::cout << number << " — чётное\n";
} else {
std::cout << number << " — нечётное\n";
}
return 0;
}
Здесь важна одна ловушка новичков: сравнение — это ==, два знака равно. Один знак = — это присваивание. Если написать if (number = 0), вы не сравните, а обнулите переменную, и условие всегда окажется ложным. Компилятор с -Wall предупредит об этом.
Проверка: введите 4 — программа скажет «4 — чётное». Введите 7 — «7 — нечётное». Введите 0 — «0 — чётное», ведь ноль делится на 2 без остатка.
Несколько вариантов: else if
Когда веток больше двух, добавляют else if. Проверим заодно знак числа:
if (number > 0) {
std::cout << "положительное\n";
} else if (number < 0) {
std::cout << "отрицательное\n";
} else {
std::cout << "ноль\n";
}
Ветки проверяются сверху вниз, выполнится первая подходящая. Как только одно условие сработало, остальные не проверяются.
Шаг 3. Цикл for: таблица умножения
Теперь для введённого числа выведем таблицу умножения от 1 до 10. Это работа для for — цикла со счётчиком, когда заранее известно, сколько раз повторять.
#include <iostream>
int main() {
int number;
std::cout << "Введите число для таблицы: ";
std::cin >> number;
for (int i = 1; i <= 10; ++i) {
std::cout << number << " x " << i
<< " = " << number * i << "\n";
}
return 0;
}
Заголовок for состоит из трёх частей, разделённых точкой с запятой: int i = 1 — начальное значение счётчика, i <= 10 — условие продолжения (пока истинно, цикл крутится), ++i — что делать после каждого прохода (увеличить i на единицу).
Проверка: введите 3 — на экране появится десять строк от «3 x 1 = 3» до «3 x 10 = 30». Если строк одиннадцать или девять — перепроверьте условие: i <= 10 даёт значения от 1 до 10 включительно, а i < 10 остановится на 9.
Граница цикла — самое частое место ошибки.<и<=отличаются на один проход, но именно этот один проход ломает таблицы, индексы массивов и суммы. Всегда мысленно проговаривайте первое и последнее значение счётчика.
Шаг 4. Цикл while: повторяем, пока не введут 0
Цикл for хорош, когда число повторов известно. Когда неизвестно — берут while: он крутится, пока условие истинно. Сделаем так, чтобы программа принимала числа одно за другим и останавливалась, когда пользователь введёт 0.
#include <iostream>
int main() {
int number;
std::cout << "Вводите числа (0 — выход):\n";
std::cin >> number;
while (number != 0) {
if (number % 2 == 0) {
std::cout << number << " чётное\n";
} else {
std::cout << number << " нечётное\n";
}
std::cin >> number;
}
std::cout << "Готово\n";
return 0;
}
Обратите внимание: чтение std::cin >> number есть и до цикла, и внутри него в конце. Первое даёт значение для первой проверки условия, второе — обновляет его перед следующим витком. Забудете второе — программа будет бесконечно печатать результат для первого введённого числа, потому что условие никогда не изменится.
Проверка: введите 4, потом 7, потом 0. Программа откликнется «4 чётное», «7 нечётное», а на 0 напечатает «Готово» и завершится.
Чем for отличается от while
| Ситуация | Что брать |
|---|---|
| Известно число повторов (10 строк таблицы, обход массива) | for |
| Повторяем, пока не выполнится условие (ввод до нуля, чтение файла) | while |
| Тело должно выполниться хотя бы один раз, потом проверка | do { ... } while (условие) |
Технически любой for можно переписать через while и наоборот — разница в читаемости. Код, где счётчик виден в одной строке, ошибается реже.
Если не получилось
Ниже — ошибки, которые вы реально увидите, и что с ними делать.
error: 'std' has not been declaredили'cout' was not declared in this scope— забыли#include <iostream>в начале файла или написалиcoutбезstd::.error: expected ';' before '}' token— пропущена точка с запятой в конце строки. Компилятор указывает строку, следующую за проблемной, так что смотрите на строку выше указанной.- Программа зависла, курсор мигает, ничего не печатается — это не ошибка, а ожидание ввода. Наберите число и нажмите Enter. Если это цикл
whileбез обновления переменной — вы поймали бесконечный цикл, остановите его сочетанием Ctrl+C. warning: suggest parentheses around assignment used as truthvalue— вы написали=вместо==внутриif. Исправьте на двойной знак.- Ввели букву вместо числа, программа печатает мусор или зацикливается —
std::cin >> numberпри нечисловом вводе оставляет переменную нетронутой и переходит в состояние ошибки. Обработка некорректного ввода — отдельная тема, здесь мы считаем, что пользователь вводит числа.
Что делать дальше
У вас есть три рабочих кирпича: if/else для ветвления, for для известного числа повторов, while для повтора по условию. Следующий шаг — объединить их: попробуйте вложить цикл в цикл и вывести таблицу умножения не для одного числа, а сразу от 1 до 9 (внешний цикл по строкам, внутренний по столбцам). Затем посмотрите оператор switch — он удобнее длинной цепочки else if, когда сравниваете одну переменную с набором значений. Синтаксис по стандарту C++17 проверяйте в справочнике cppreference — там для каждой конструкции есть рабочие примеры.
Создатель презентаций: Структура и текст каждого слайда: заголовки-утверждения, одна мысль на слайд, заметки докладчику.
Спросить за 150 ₽Источники: cppreference — операторы управления потоком (if, for, while), GCC — опции предупреждений компилятора
Частые вопросы
У меня компилятор старее, чем в примерах. Код заработает?
Чем for отличается от while, если через оба можно написать одно и то же?
Программа не реагирует на ввод и просто висит. Что не так?
Почему if (number = 0) не работает как проверка на ноль?
Нужны ли фигурные скобки, если в if всего одна строка?
Как остановить программу, которая зациклилась?
Материал носит информационный характер и подготовлен редакцией «Агентуры». Он не является офертой, рекламой или индивидуальной консультацией. Упомянутые продукты, компании и торговые знаки принадлежат их правообладателям. Перед принятием решений, влекущих юридические или финансовые последствия, обратитесь к профильному специалисту.