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

Оператор goto обеспечивает безусловный переход на указанную метку в переделах функции.

Синтаксис: goto m1;

Метка с программе записывается в начале строки и отделяется от операторов двоеточием. Например:

{

func1();

goto m1;

func2(); // Никогда не выполняется

m1: func3();

}

В сочетании с оператором if (рассмотренным ниже) оператор goto может осуществлять условный переход на определённую метку:

if(a==5)

goto m2;

В соответствии с принципами структурного программирования, применение оператора goto считается дурным тоном. Тем не менее в исключительных случаях (в программах со множественным вложением условных операторов) его применение может значительно сократить размер кода и улучшить его читаемость.

Множественный выбор. Операторы switch-case.

Операция условия и конструкция if-else облегчают написание программ, в которых осуществляется выбор между двумя вариантами.

Однако иногда в программе необходимо произвести выбор одного из нескольких вариантов. Мы можем это сделать, используя конструкцию if-else if-else, и т.д., но во многих случаях оказывается более удобным применять оператор switch.

Синтаксис:

switch (целое выражение)

{

case метка1:

[Операторы;] (необязат.)

case метка2:

[Операторы;] (необязат.)

… . . . .

[default: операторы;]

}

Оператор switch вычисляет целое выражение в круглых скобках и сравнивает это значение со всеми значениями (метками), перечисленными с помощью ключевых слов case. Каждая метка должна быть либо целой константой, либо символьной константой, либо константным выражением. Как только значение вычисляемого выражения совпадает с какой-либо меткой, управление передаётся на оператор, следующий за меткой.

Если ни одна из меток не подходит, то управление передается оператору с меткой default (если такой имеется). В противном случае управление передается оператору, следующему за оператором switch.

Как выражения, так и метки должны иметь значения целого типа (включая тип char).

Пример:

switch (letter)

{

case ‘a’:

case ‘A’: printf (“Это буква a (большая или маленькая)”, letter);

break;

case 66: // 66 – код буквы B

printf (“Это буква B (большая)”, letter);

break;

case 0x30+2: //0x30+2 – код цифры 2

printf (“Это цифра 2”, letter);

break;

default: printf (“А вот не знаю я что это за символ”);

}

В отличие от других языков (например Pascal) в С в операторе switch-case после выполнения оператора или группы операторов, следующих за соответствующим условию case выполнение оператора не прекращается, а продолжается до конца оператора switch, выполняя все инструкции, написанные для других case. Это позволяет записывать несколько последовательных меток для одной и той же группы операторов. В этом случае она будет выполняться если значение выражения равно хотя бы одной из меток (см. пример выше).

Если же в программе не требуется выполнение последующих операторов, то прервать выполнение можно с помощью оператора break. Оператор break прерывает выполнение программы внутри тела оператора switch (а также for, while и do) и передаёт управление следующему после switch оператору:

switch (l)

{

case ‘a’: func1(); // Эта функция вызывается только в случае l=’a’

case ‘b’: func2(); // А эта - в случае l=’a’ или l=’b’

break;

case ‘c’: func3(); // Эта функция вызывается только в случае l=’c’

}

Поскольку в большинстве случаев требуется выполнение только одной группы операторов для каждого case, то тело оператора switch обычно состоит из набора блоков начинающихся с выражения “case XX:” и заканчивающегося оператором break.

Как и в других блоках операторов, внутри switch можно определять переменные:

switch (letter)

{

int l;

case ‘a’: l=

printf(“%d”,l);

break;

case ‘A’: l=2;

printf(“%d”,l);

break;

}

Обычно этого не делают, т.к. это ухудшает удобочитаемость программы.

Каковы ограничения использования оператора switch. Его нельзя использовать для работы со стрингами, значениями с плавающей точкой. В метках case нельзя использовать переменные, а также в них нельзя применять интервалы (как это можно сделать, например в Basic). В этих случаях нужно применять конструкции if-else:

if (f==3.5)

printf(“f=3.5”);

else

if(f>4 && f<6)

printf(“4<f<6”) ;

OLE и DDE. Связывание и внедрение данных в документы.

Лекция оле

Наши рекомендации