Язык программирования C



         

IF - ELSE


Оператор if - else используется при необходимости сделать выбор. Формально синтаксис имеет вид

if (выражение) оператор-1 else оператор-2,

Где часть else является необязательной. Сначала вычисляется выражение; если оно "истинно" /т.е. значение выражения отлично от нуля/, то выполняется оператор-1. Если оно ложно /значение выражения равно нулю/, и если есть часть с else, то вместо оператора-1 выполняется оператор-2.

Так как if просто проверяет численное значение выражения, то возможно некоторое сокращение записи. Самой очевидной возможностью является запись

if (выражение)

вместо

if (выражение !=0)

иногда такая запись является ясной и естественной, но временами она становится загадочной.

То, что часть else в конструкции if - else является необязательной, приводит к двусмысленности в случае, когда else опускается во вложенной последовательности операторов if. Эта неоднозначность разрешается обычным образом - else связывается с ближайшим предыдущим if, не содержащим else.

Например, в

if ( n > 0 ) if( a > b ) z = a; else z = b;

конструкция else относится к внутреннему if, как мы и показали, сдвинув else под соответствующий if. Если это не то, что вы хотите, то для получения нужного соответствия необходимо использовать фигурные скобки:

if (n > 0) { if (a > b) z = a; } else z = b;

Tакая двусмысленность особенно пагубна в ситуациях типа

if (n > 0) for (i = 0; i < n; i++) if (s[i] > 0) { printf("..."); return(i); } else /* wrong */ printf("error - n is zero\n");

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

Между прочим, обратите внимание, что в

if (a > b) z = a; else z = b;

после z=a стоит точка с запятой. Дело в том, что согласно грамматическим правилам за if должен следовать оператор, а выражение типа z=a, являющееся оператором, всегда заканчивается точкой с запятой.




Содержание  Назад  Вперед