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, являющееся оператором, всегда заканчивается точкой с запятой.
on_load_lecture()