if (*it == ' ')
break; //
// ...
}
//
//
break; // #2,
case '+':
// ...
} //
//
} //
Оператор break
с меткой #1
завершает цикл for
в разделе case
для случая дефиса. Он не завершает внешний оператор switch
и даже не завершает обработку текущего случая. Выполнение продолжается с первого оператора после цикла for
, который мог бы содержать дополнительный код обработки случая дефиса или оператор break
, который завершает данный раздел.
Оператор break
с меткой #2
завершает оператор switch
, но не внешний цикл while
. Выполнение кода после оператора break
продолжает условие цикла while
.
Упражнение 5.20. Напишите программу, которая читает последовательность строк со стандартного устройства ввода до тех пор, пока не встретится повторяющееся слово или пока ввод слов не будет закончен. Для чтения текста по одному слову используйте цикл while
. Для выхода из цикла при встрече двух совпадающих слов подряд используйте оператор break
. Выведите повторяющееся слово, если оно есть, а в противном случае отобразите сообщение, свидетельствующее о том, что повторяющихся слов нет.
5.5.2. Оператор continue
continue
прерывает текущую итерацию ближайшего цикла и немедленно начинает следующую. Оператор continue может присутствовать только в циклах for
, while
или do while
, включая операторы или блоки, вложенные в такие циклы. Подобно оператору break
, оператор continue
во вложенном цикле воздействует только на ближайший окружающий цикл. Однако, в отличие от оператора break
, оператор continue
может присутствовать в операторе switch
, только если он встроен в итерационный оператор.
Оператор continue
прерывает только текущую итерацию; выполнение остается в цикле. В случае цикла while
или do while
выполнение продолжается с оценки условия. В традиционном цикле for
выполнение продолжается в выражении заголовка. В серийном операторе for
выполнение продолжается с инициализации управляющей переменной следующим элементом последовательности.
Следующий цикл читает со стандартного устройства ввода по одному слову за раз. Обработаны будут только те слова, которые начинаются с символа подчеркивания. Для любого другого значения текущая итерация заканчивается.
string buf;
while (cin >> buf && !buf.empty()) {
if (buf[0] != '_')
continue; //
//
}
Упражнение 5.21. Переделайте программу из упражнения раздела 5.5.1 так, чтобы она искала дубликаты только тех слов, которые начинаются с прописной буквы.
goto
goto
обеспечивает безусловный переход к другому оператору в той же функции.
goto
. Они затрудняют и понимание, и изменение программ.
Оператор goto
имеет следующий синтаксис:
goto
(label) — это идентификатор, которым помечен оператор.
end: return; //
Метки независимы от имен, используемых для переменных и других идентификаторов. Следовательно, у метки может быть тот же идентификатор, что и у другой сущности в программе, не вступая в конфликт с другим одноименным идентификатором. Оператор goto
и помеченный оператор, на который он передает управление, должны находиться в той же функции.
Подобно оператору switch
, оператор goto
не может передать управление из точки, где инициализированная переменная вышла из области видимости, в точку, где эта переменная находится в области видимости.
// ...
goto end;
int ix = 10; //
//
end:
//
//
ix = 42;
Переход назад за уже выполненное определение вполне допустим. Переходя назад к точке перед определением переменная приведет к ее удалению и повторному созданию.