| netlib.narod.ru | < Назад | Оглавление | Далее > |
Инструкция if-else используется для принятия решений. Формально ее синтакстис имеет следующий вид:
if (выражение)
инструкция1
else
инструкция2
причем часть else может отсутствовать. Сначала вычисляется выражение, и, если оно истинно (т.е. отлично от нуля), выполняется инструкция1. Если выражение ложно (т.е. его значение равно нулю) и существует часть else, то выполняется инструкция2.
Так как инструкция if просто проверяет числовое значение выражения, условие иногда можно записывать в сокращенном виде. Так, запись
if (выражение)
короче, чем
if (выражение != 0)
Иногда такие сокращения естественны и ясны, в других случаях, наоборот, затрудняют понимание программы.
Отсутствие части else в одной из вложенных друг в друга конструкций if-else может привести к неоднозначному толкованию записи. Компилятор решает эту неоднозначность связывая else с ближайшей инструкцией if у которой нет своего else. Например, в
if (n > 0)
if (a > b)
z = a;
else
z = b;
else относится к внутреннему if, что мы и показали с помощью отступов. Если нам требуется иная интерпретация, необходимо должным образом расставить фигурные скобки:
if (n > 0) {
if (a > b)
z = a;
}
else
z = b;
Ниже приводится пример ситуации, когда неоднозначность особенно опасна:
if (n >= 0)
for (i = 0; i < n; i++)
if (s[i] > 0) {
printf(". . .");
return i;
}
else /* НЕВЕРНО */
printf("Ошибка - отрицательное n\n");
С помощью отступов мы недвусмысленно показали, что нам нужно, однако компилятор не воспримет эту информацию и отнесет else к внутреннему if. Искать такого рода ошибки особенно тяжело. Здесь уместен следующий совет: обрамляйте вложенные инструкции if фигурными скобками.
Кстати, обратите внимание на точку с запятой после выражения z = a в записи
if (a > b)
z = a;
else
z = b;
Здесь она обязательна, поскольку по правилам грамматики за if должна следовать инструкция, а чтобы выражение, вроде z = a рассматривалось как инструкция, оно должно заканчиваться точкой с запятой.
| netlib.narod.ru | < Назад | Оглавление | Далее > |