3.17. Операторът do
Представете си, че сте
били помолени да напишете една интерактивна програма, която превръща мили в
километри. Програмата би могла да изглежда така:
int more = 1; // dummy
value to start loop
while ( more ) {
val = getValue();
val =
convertValue(val);
printValue(val);
more = doMore();
}
Проблемът
тук е, че изразът, свързан с управлението на цикъла е поставен в тялото му. При
циклите while и for, обаче, тялото на цикъла не се изпълнява никога, освен ако
управляващият израз няма стойност истина. Това означава, че програмистът трябва
да даде първоначална стойност за започване на изпълнението на цикъла. Цикълът do
гарантира, че тялото му винаги ще бъде изпълнено поне веднъж. Не е необходимо
това да бъде осъществявано принудително.
Цикълът do има следния
синтаксис:
do statement; while ( expression );
Операторът
statement се изпълнява преди пресмятането на израза exprssion. Ако този израз
има стойност лъжа изпълнението на цикъла do приключва. Нашата програма сега
изглежда така:
int more;
do {
val = getValue();
val =
convertValue(val);
printValue(val);
more = doMore();
while ( more
);
Оператори за скок
Тези оператори безусловно предават
управлението на програмата във вътрешността на дадена функция. Към тях се
причисляват операторите break, continue и goto. Следващият раздел разглежда тези
оператори последователно.
3.18. Операторът
break
Операторът break прекратява изпълнението на най-вътрешния
оператор while, do, for или switch. Изпълнението продължава от оператора,
записан непосредствено след прекъснатия оператор. Например, нека на IntArray е
необходима член-функция, която преглежда масив като търси първата поява на
дадена стойност. Ако тя е намерена, функцията връща индекса й; иначе връща -1.
Това се реализира по следния начин:
#include
"IntArray.h"
IntArray::search( int Val ) {
// val in ia?
return
index;
otherwise, -1
int loc = -1;
for ( int i = 0; i < size; ++i
)
if ( val == ia[ i ]) {
loc = i; break;
}return loc;
}
Няма
причина изпълнението на цикъла да продължава ако стойността бъде намерена.
Затова операторът break прекъсва изпълнението на цикъла. Изпълнява се оператора
return, записан непосредствено след цикъла for.