Справочник по 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:
Антибот: *  
Ваш комментарий: