3.19. Операторът
continue
Операторът continue предизвиква прекратяване на текущата
итерация на най-вътрешния оператор while, do или for. В случаите, когато
използуваме циклите while и do, изпълнението продължава с изчисляването на
управляващия израз. Когато използуваме цикъла for изпълнението продължава с
пресмятането на expression-2. За разлика от оператора break, който прекратява
изпълнението на цикъла, операторът continue прекратява изпълнението само на
текущата итерация. Например, следващият програмен фрагмент чете от текстов файл
по една дума. Обработва се всяка дума, която започва с подчертаващо тиренце;
иначе се прекратява текущата итерация:
while ( cin >> inBuf )
{
if ( inBuf[0] != ‘_’ ) continue; // terminate iteration// ...
process
string ...
3.20. Операторът goto
Ако операторите
break и continue не съществуваха, програмистът би имал нужда от средство, чрез
което да излиза вън от циклите или от оператора switch. Операторът goto предлага
една такава възможност, но тя рядко се използува сега в
програмирането.
Операторът goto осъществява безусловно предаване на
управлението в програмата. Операторът, на който се предава управлението се
отбелязва с етикет. Етикетът и goto операторът трябва да се намират в една и
съща функция. Операторът goto има следния синтаксис:
goto
label;
където label е дефиниран от потребителя идентификатор. Един етикет
може да бъде използуван само за отбелязване на оператора, на който се предава
управлението, и трябва да завършва с двуеточие.
Етикетът не може да бъде
написан непосредствено преди затваряща фигурна скоба. Един типичен метод за
избягване на това ограничение е добавянето на празен оператор след етикета.
Например,
end: ; // null statement}
Операторът goto не може да
прескача явна или неявна инициализационна дефиниция на променлива, освен ако
тази дефиниция принадлежи на някакъв блок и се прескача целия блок. Следващата
програма, например, не е правилна
#include "IntArray.h"extern int
getValue();
extern void processArray( IntArray& );
main() {
int sz
= getValue();
if ( sz <= 0 )
goto end; // illegal
jumpIntArray
myArray( sz );
procassArray( myArray );
end;
}
myArray представя
един явен инициализатор - конструкторът на класа IntArray.
Упражнение
3-21. Напишете отново main() така, че да бъде правилна.