Часто необходимо досрочно завершить цикл. С этой задачей успешно справляется оператор 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 не рекомендуется. Он затрудняет понимание программ.


 Похожие публикации
2016-01-31 • Просмотров [ 342 ]