Часто необходимо досрочно завершить цикл. С этой задачей успешно справляется оператор break
.
Он прерывает ближайший оператор while, do while, for или switch. Выполнение будет возобновлено с оператора, следующего за завершаемым оператором.
break
может располагаться только в цикле или операторе switch (включая операторы и блоки, вложенные в эти циклы). Оператор break воздействует только на ближайший цикл или оператор switch.
#include <iostream>
using namespace std;
int main()
{
setlocale(LC_ALL, "Russian");
int i = 0;
char ch;
while (cin >> ch) {
switch (ch) {
case 'a':
cout << "input a" << endl;
break; // #1 выйти из switch
case 'b':
for (int i = 0; i < 10; i++) {
if (i == 5) {
cout << "input b " << i << endl;
break; // #2 выйти из цикла for
}
}
break; //если закомментировать этот break, при вводе "b"
//будет выполняться метка default поскольку
//break #2 не относится к case 'b'
// break #2 передает управление сюда
default:
cout << "input " << ch << endl;
break;
}
// break #1 передает управление сюда
}
return 0;
}
Оператор continue
прерывает текущую итерацию ближайшего цикла и немедленно начинает следующую.
Оператор continue
может присутствовать только в циклах while, do while, for, включая операторы и блоки, вложенные в такие циклы. В отличие от break, continue
может присутствовать в операторе switch, только если он встроен в итерационный оператор.
#include <iostream>
using namespace std;
int main()
{
setlocale(LC_ALL, "Russian");
for (int i = -5; i <= 5; i++) {
if (i == 0) {
cout << "Деление на 0!" << endl;
continue;
}
cout << i*i / i << endl;
}
}
Оператор goto
обеспечивает безусловный переход к другому оператору в той же функции. Для этого используются метки.
Предыдущий пример для continue
можно переписать без цикла for, используя goto
.
#include <iostream>
using namespace std;
int main()
{
setlocale(LC_ALL, "Russian");
int i = -5;
begin: //метка begin
if (i == 0) {
cout << "Деление на 0!" << endl;
i++;
goto begin; //перейти к метке
}
else if (i <= 5) {
cout << i*i / i << endl;
i++;
goto begin; //перейти к метке
}
else
cout << "Расчет окончен" << endl;
}
Использовать оператор goto
не рекомендуется. Он затрудняет понимание программ.