Операторы выхода и переходов в C++
В этом уроке вы познакомитесь с оператором выхода exit, а также с операторами перехода switch, break и continue в C++. В конце вас ждут практические задачи с решениями и чек-лист для самопроверки.
Главная мысль урока: операторы перехода управляют ходом выполнения программы. Например, exit(0) завершает программу, break прерывает цикл или switch, а continue пропускает текущую итерацию цикла.
Содержание
1. Цели урока
- Понять, как работает оператор выхода
exit. - Научиться использовать
switchдля выбора одного из нескольких вариантов. - Освоить операторы
breakиcontinueв циклах и конструкцииswitch.
2. Что такое операторы перехода и выхода
Обычно программа выполняет команды по порядку: строка за строкой. Но иногда нужно остановить программу, прервать цикл, пропустить одну итерацию или выбрать одну ветку из нескольких вариантов. Для этого в C++ есть операторы перехода и выхода.
К таким операторам относятся exit, switch, break и continue. Они помогают управлять ходом выполнения программы и делают логику более удобной.
#include <iostream>
#include <cstdlib>
using namespace std;
int main()
{
int x = -1;
if (x < 0)
{
cout << "Oshibka" << endl;
exit(0);
}
cout << "Programma prodolzhaetsya" << endl;
return 0;
}
Частая путаница
break не завершает всю программу, а только выходит из цикла или switch. Для полного завершения программы используют exit или return из main.3. Оператор выхода exit
База
Оператор exit немедленно завершает выполнение программы. После вызова exit остальные строки уже не выполняются.
Число внутри скобок называется кодом завершения. Например, exit(0) обычно означает, что программа завершилась нормально, без ошибки. Значение exit(1) и другие ненулевые значения часто используют для сообщения об ошибке.
Синтаксис
exit(kod_zaversheniya);
kod_zaversheniya - это целое число.
0 - успешное завершение программы.
1 или другое ненулевое число - завершение из-за ошибки или особой ситуации.
#include <iostream>
#include <cstdlib>
using namespace std;
int main()
{
int age;
cin >> age;
if (age < 0)
{
cout << "Vozrast ne mozhet byt otricatelnym" << endl;
exit(1);
}
cout << "Vozrast prinyat" << endl;
return 0;
}
exit удобно использовать, когда нужно сразу остановить программу при критической ошибке.Типовые задачи
Проверка корректности ввода
Если число меньше нуля, программа завершается сразу.
int number;
cin >> number;
if (number < 0)
{
cout << "Nekorrektnyy vvod" << endl;
exit(1);
}
cout << "Chislo prinyato" << endl;
Остановка программы при ошибке
Если пароль неверный, дальше код не выполняется.
string password;
cin >> password;
if (password != "12345")
{
cout << "Dostup zapreshen" << endl;
exit(1);
}
cout << "Dostup razreshen" << endl;
Типичные ошибки
Ошибка 1: ожидание, что код после exit выполнится
cout << "Nachalo" << endl;
exit(0);
cout << "Eta stroka ne vypolnitsya" << endl;
Ошибка 2: непонимание смысла числа в exit(...)
exit(0); // программа завершилась успешно
exit(1); // программа завершилась с ошибкой
4. Оператор switch и break
Синтаксис и правила
switch позволяет выбрать одну из нескольких веток в зависимости от значения выражения.
switch (vyrazhenie)
{
case znachenie1:
komandy;
break;
case znachenie2:
komandy;
break;
default:
komandy;
}
vyrazhenie - это переменная или выражение, значение которого проверяется.
case - отдельный вариант значения.
break - завершает выполнение switch после нужного case.
default - ветка, которая выполняется, если ни один case не подошел.
#include <iostream>
using namespace std;
int main()
{
int day = 2;
switch (day)
{
case 1:
cout << "Ponedelnik" << endl;
break;
case 2:
cout << "Vtornik" << endl;
break;
case 3:
cout << "Sreda" << endl;
break;
default:
cout << "Neizvestnyy den" << endl;
}
return 0;
}
Оператор break также используется в циклах.
break;
В цикле break полностью прерывает цикл.
В конструкции switch break завершает выбранную ветку.
break выполнение может перейти в следующий case.Типовые рецепты
Меню выбора действия
int choice = 1;
switch (choice)
{
case 1:
cout << "Start" << endl;
break;
case 2:
cout << "Settings" << endl;
break;
case 3:
cout << "Exit" << endl;
break;
default:
cout << "Unknown command" << endl;
}
Выход из цикла при нужном значении
for (int i = 1; i <= 10; i++)
{
if (i == 5)
{
break;
}
cout << i << endl;
}
Ошибки
Ошибка 1: забытый break
int x = 1;
switch (x)
{
case 1:
cout << "Odin" << endl;
case 2:
cout << "Dva" << endl;
break;
}
Ошибка 2: использование сложных условий внутри case
// switch не подходит для условий вида x > 10
// для этого лучше использовать if / else
5. Оператор continue
Оператор continue используется только в циклах. Он пропускает оставшуюся часть текущей итерации и сразу переходит к следующей.
Синтаксис
continue;
После выполнения continue команды ниже в теле цикла уже не выполняются для текущего шага.
#include <iostream>
using namespace std;
int main()
{
for (int i = 1; i <= 5; i++)
{
if (i == 3)
{
continue;
}
cout << i << endl;
}
return 0;
}
В этом примере число 3 не будет выведено, потому что при i == 3 управление сразу переходит к следующей итерации.
continue удобно использовать, когда нужно пропустить отдельные значения, не прерывая весь цикл.Типичные ошибки
Ошибка 1: путаница между break и continue
// break - полностью выходит из цикла
// continue - пропускает только текущую итерацию
Ошибка 2: использование continue вне цикла
// continue можно использовать только в циклах
6. Когда использовать switch, break, continue и exit
Сравнение подходов
exit завершает всю программу. switch удобен для выбора одной ветки по точному значению переменной. break нужен для выхода из цикла или завершения ветки switch. continue пропускает одну итерацию цикла и продолжает работу дальше.
// exit
if (error)
{
exit(1);
}
// switch
switch (command)
{
case 1:
cout << "Start" << endl;
break;
default:
cout << "Unknown" << endl;
}
// continue
for (int i = 0; i < 5; i++)
{
if (i == 2)
{
continue;
}
cout << i << endl;
}
Типичные ошибки
Ошибка 1: выбор switch для сложных условий
// Если нужны сравнения или диапазоны,
// лучше использовать if / else
Ошибка 2: слишком частое использование exit
// exit подходит для немедленного завершения,
// но не должен заменять обычную логику программы
7. Практика: типовые задачи (с решениями)
Базовые задачи
Задача 1: Завершить программу при отрицательном числе
Если введено число меньше нуля, программа должна сразу завершиться.
#include <iostream>
#include <cstdlib>
using namespace std;
int main()
{
int number;
cin >> number;
if (number < 0)
{
cout << "Oshibka" << endl;
exit(1);
}
cout << "Chislo prinyato" << endl;
return 0;
}
Задача 2: Вывести день недели через switch
По числу от 1 до 3 вывести название дня.
#include <iostream>
using namespace std;
int main()
{
int day;
cin >> day;
switch (day)
{
case 1:
cout << "Ponedelnik" << endl;
break;
case 2:
cout << "Vtornik" << endl;
break;
case 3:
cout << "Sreda" << endl;
break;
default:
cout << "Neizvestnyy den" << endl;
}
return 0;
}
Задачи на операторы перехода
Задача 3: Прервать цикл при встрече числа 5
#include <iostream>
using namespace std;
int main()
{
for (int i = 1; i <= 10; i++)
{
if (i == 5)
{
break;
}
cout << i << endl;
}
return 0;
}
Задача 4: Пропустить число 3 в цикле
#include <iostream>
using namespace std;
int main()
{
for (int i = 1; i <= 5; i++)
{
if (i == 3)
{
continue;
}
cout << i << endl;
}
return 0;
}
Задача 5: Простой калькулятор на switch
#include <iostream>
using namespace std;
int main()
{
int a = 10;
int b = 5;
char op = '+';
switch (op)
{
case '+':
cout << a + b << endl;
break;
case '-':
cout << a - b << endl;
break;
default:
cout << "Neizvestnaya operaciya" << endl;
}
return 0;
}
8. Чек-лист самопроверки знаний
Отметьте пункты, которые вы действительно понимаете и можете применить без подсказок.
| ✓ | Навык | Проверка |
|---|---|---|
| Оператор exit | Могу объяснить, что делает exit(0) и что означает число в скобках. |
|
| Синтаксис exit | Помню синтаксис exit(kod_zaversheniya);. |
|
| Оператор switch | Могу написать конструкцию switch с несколькими case и default. |
|
| Оператор break | Понимаю, что break завершает цикл или ветку switch. |
|
| Оператор continue | Могу использовать continue для пропуска текущей итерации цикла. |
|
| Разница между break и continue | Могу объяснить, чем отличается выход из цикла от пропуска итерации. | |
| Роль default | Понимаю, зачем нужен блок default в switch. |
|
| Выбор конструкции | Могу выбрать между if, switch, break, continue и exit в простой задаче. |
|
| Типичные ошибки | Помню, что забытый break может изменить поведение программы. |