—правочник по C/C++
if управл€ющие структуры

”словные операторы if/else

”словный оператор if позвол€ет мен€ть направление выполн€емых программой действий в зависимости от результата проверки услови€. ќбща€ форма записи оператора if имеет следующий вид.

if(условие) {
	блок_операторов_1
}
else {
	блок_операторов_2
}

≈сли блок_операторов состоит только из одного оператора, в фигурных скобках необходимость отпадает. ќператор else необ€зателен.

¬ качестве элемента условие можно использовать любое выражение. ≈сли это выражение имеет значение, оцениваемое как истинное (любое значение, отличное от нул€), будет выполнен блок_операторов_1; в противном случае будет выполнен блок_операторов_2, если таковой существует.

¬ следующем фрагменте программы провер€етс€, больше ли значение переменной х числа 10.

if(x > 10}
	cout << "x больше 10.";
else
	cout << "x меньше или равен 10.";

ќператор выбора switch

ќператор switch Ч это —/—++-оператор многоканального ветвлени€. ќн используетс€ дл€ организации работы программы по одному из нескольких направлений. ќбща€ форма записи этого оператора имеет следующий вид.

switch (выражение) {
	case константа_1:
		последовательность_операторов_1;
	break;
	case константа_2:
		последовательность_операторов_2;
	break;
	...
	case константа_N:
		последовательность_операторов_N;
	break;
	default: default-операторы;
}

 ажда€ последовательность операторов может состо€ть из одного или нескольких операторов. –аздел default необ€зателен.  ак выражение, так и константы, расположенные после директив case, должны иметь целочисленный тип.

–абота оператора switch заключаетс€ в сравнении элемента выражение с константами. ѕри обнаружении совпадени€ выполн€етс€ соответствующа€ последовательность операторов. ≈сли в выполн€емой последовательности операторов нет оператора break, программа перейдет к выполнению операторов, относ€щихс€ к следующей директиве case. ƒругими словами, начина€ с точки совпадени€ элемента выражение и константы, выполнение операторов будет продолжатьс€ до тех пор, пока либо не обнаружитс€ оператор break, либо не закончитс€ оператор switch. ≈сли не обнаружитс€ никакое совпадение, то при наличии директивы default будет выполн€тьс€ последовательность операторов, относ€ща€с€ к этой директиве. ¬ противном случае(при отсутствии директивы default) никакие действи€ выполнены не будут. ¬ следующем примере анализируетс€ и выполн€етс€ команда меню.

switch(ch) {
	case 'e': enter();
	break;
	case '1' : list();
	break;
	case 's': sort();
	break;
	case 'q': exit(0);
	break;
	default:
		cout << "Ќеизвестна€ команда!\n";
		cout << "ѕопробуйте еще раз.\n";
}

ќператор default

ќператор  default используетс€ в операторе switch, чтобы сигнализировать о том, что, если в операторе switch не обнаружитс€ ни одного совпадени€, будет выполнен блок кода, помеченный ключевым словом default.

ќператор break

ќператор break используетс€ дл€ выхода из циклов do, for и while в обход обычного услови€ выхода из цикла. ќн также используетс€ дл€ выхода из блока оператора switch.

Ќиже показан пример оператора break в цикле.

do {
	х = getx();
	if(x < 0) break; //выход из цикла, если значение х отрицательно
	process(х);
} while(!done);

Ќа этом работа цикла завершаетс€, если значение переменной х оказалось отрицательным.

¬ операторе switch оператор break не позвол€ет программе выполн€ть набор операторов, относ€щихс€ к следующему оператору case.(«а подробност€ми обращайтесь к разделу "switch", приведенному ниже в этой главе.)

ќператор break прекращает работу только тех циклов for, do(), while и оператора switch, которые его содержат. ќн не прервет работу ни одного из вложенных циклов или операторов switch.

ќператор continue

ќператор continue используетс€ дл€ пропуска оставшихс€ операторов в теле цикла и передает управление на следующую итерацию, котора€ начинаетс€ с вычислени€ условного выражени€. Ќапример, следующий цикл whi 1е будет просто читать символы с клавиатуры до тех пор, пока не будет введена буква s.

while(ch = getchar()) {
	if(ch != 's') continue; // читаем следующий символ
	process(ch);
}

ќбращение к функции process() не произойдет до тех пор, пока переменна€ ch не будет содержать символ s.

ќператор безусловного перехода goto

ќператор goto передает управление программой оператору, помеченному меткой, котора€ задана в операторе goto. ќбща€ форма записи оператора goto имеет следующий вид.

goto метка;
...
метка:

—овет программисту

’от€ оператор goto как метод управлени€ программой давно "впал в немилость", он порой оправдывает свое существование. ќдним из таких особых случаев €вл€етс€ выход из глубоко вложенной процедуры. –ассмотрим, например, следующий фрагмент программы.

int i, j, k;
int stop = 0;

for(i=0; i<100 && istop; i++) {
	for(j=0; j<10 && istop; j+ + ) {
		for(k=0; k<20; k++) {
			// ...
			if(something()) {
				stop = 1;
				break;
			}
		}
	}
}

ѕеременна€ stop используетс€ дл€ отмены двух внешних циклов при условии возникновени€ некоторого программного событи€. ќднако все же лучше достичь того же эффекта с помощью оператора goto.

int i, j, k;

for(i=0; i<100; i++) {
	for(j=0; j<10; j + +) {
		for(k=0; k<20; k++) {
			// . ..
			if(something()) {
				goto done;
			}
		}
	}
}

done: // ...

 ак видите, использу€ оператор goto, можно обойтись без дополнительных затрат ресурсов, которые св€заны с повторением проверки значени€ переменной stop в предыдущем варианте.

Ќесмотр€ на то что следует избегать использовани€ оператора goto в качестве универсальной формы управлени€ циклами, в особых случа€х его все-таки можно примен€ть с большим успехом.


¬се метки должны оканчиватьс€ двоеточием и не должны вступать в конфликт ни с какими ключевыми словами или именами функций.  роме того, оператор goto может передавать управление только внутри текущей функции (не от одной функции к другой).

÷икл for

÷икл for позвол€ет выполнить автоматическую инициализацию и увеличение переменной счетчика. ќбща€ форма записи такова.

for (инициализаци€; условие; инкремент) {
	//блок_операторов
}

≈сли блок операторов состоит только из одного оператора, в фигурных скобках необходимость отпадает.

Ќесмотр€ на то что цикл for допускает р€д отклонений, как правило, инициализаци€ устанавливает переменную управлени€ циклом равной ее начальному значению. Ёлемент условие обычно представл€ет собой оператор отношени€, сравнивающий значение переменной цикла с ее конечным значением, а элемент инкремент увеличивает (или уменьшает) значение переменной цикла. ≈сли условие дает ложное значение сразу после инициализации, тело цикла for ни разу не будет выполнено.

ѕри выполнении следующего оператора сообщение "ѕривет" будет выведено дес€ть раз.

for(t=0; t<10; t + +) cout << "ѕривет\n";

÷икл while

ƒл€ цикла while используетс€ следующа€ обща€ форма.

whi1е(условие) {
	блок_операторов
}

≈сли блок_операторов цикла while состоит только из одного оператора, фигурные скобки можно опустить.

ѕри выполнении цикла while сначала провер€етс€ условие. —ледовательно, если условие дает ложный результат при первой же проверке, тело цикла (блок_операторов) не выполн€етс€ ни разу. Ёлемент условие может быть любым выражением.

Ќиже приведен пример цикла while, который читает 100 символов и сохран€ет их в массиве символов.

char s[256];
t = 0;
while(t<100) {
	s[t] = stream.get();
}

÷икл do

ќбща€ форма записи цикла do имеет такой вид.

do {
	блок_операторов
} while(условие);

≈сли при выполнении цикла повтор€етс€ только один оператор, то фигурные скобки можно опустить, хот€ они внос€т в этот оператор определенную €сность.

÷икл do Ч это единственный цикл в €зыке C++, который будет всегда иметь по крайней мере одну итерацию, поскольку условие провер€етс€ после выполнени€ тела цикла.





2016-12-27 00:40:57 –Р–љ–і—А–µ–є

–Т —А–∞–Ј–і–µ–ї–µ "–Ю–њ–µ—А–∞—В–Њ—А break", –≤–Њ –љ–∞—З–∞–ї–µ –≤—В–Њ—А–Њ–≥–Њ –њ—А–µ–і–ї–Њ–ґ–µ–љ–Є—П –і–Њ–ї–ґ–љ–Њ –±—Л—В—М: "–Ю–љ —В–∞–Ї–ґ–µ...".




–Ю—Б—В–∞–≤–Є—В—М –Ї–Њ–Љ–Љ–µ–љ—В–∞—А–Є–є:
–Т–∞—И–µ –Ш–Љ—П:
Email:
–Р–љ—В–Є–±–Њ—В: *  
–Т–∞—И –Ї–Њ–Љ–Љ–µ–љ—В–∞—А–Є–є: