Книга: Язык программирования Си. Издание 3-е, исправленное
3.2 Конструкция if-else
3.2 Конструкция if-else
Инструкция if-else используется для принятия решения. Формально ее синтаксисом является:
if (выражение)
инструкция1
else
инструкция2
причем else-часть может и отсутствовать. Сначала вычисляется выражение, и, если оно истинно (т. е. отлично от нуля), выполняется инструкция1. Если выражение ложно (т. е. его значение равно нулю) и существует else-часть, то выполняется инструкция2.
Так как if просто проверяет числовое значение выражения, условие иногда можно записывать в сокращенном виде. Так, запись
if (выражение)
короче, чем
if (выражение != 0 )
Иногда такие сокращения естественны и ясны, в других случаях, наоборот, затрудняют понимание программы.
Отсутствие else-части в одной из вложенных друг в друга if-конструкций может привести к неоднозначному толкованию записи. Эту неоднозначность разрешают тем, что else связывают с ближайшим if, у которого нет своего else. Например, в
if (n › 0)
if (а › b)
z = a;
else
z = b;
else относится к внутреннему if, что мы и показали с помощью отступов. Если нам требуется иная интерпретация, необходимо должным образом расставить фигурные скобки:
if (n › 0) {
if (а › b)
z = a;
}
else
z = b;
Ниже приводится пример ситуации, когда неоднозначность особенно опасна:
if (n ›= 0)
for (i=0; i ‹ n; i++)
if (s[i] › 0) {
printf(":");
return i;
}
else /* НЕВЕРНО */
printf("ошибка - отрицательное nn");
С помощью отступов мы недвусмысленно показали, что нам нужно, однако компилятор не воспримет эту информацию и отнесет else к внутреннему if. Искать такого рода ошибки особенно тяжело. Здесь уместен следующий совет: вложенные if обрамляйте фигурными скобками. Кстати, обратите внимание на точку с запятой после z = a в
if (а › b)
z = а;
else
z = b;
Здесь она обязательна, поскольку по правилам грамматики за if должна следовать инструкция, а выражение-инструкция вроде z = a; всегда заканчивается точкой с запятой.
- 3.3 Конструкция else-if
- Конструкция repeat-until
- 6.1.3 IF-THEN-ELSE-ENDIF
- if-else Statement
- Условный оператор if
- Оператор if
- Объединение операторов if и else
- 5.4.2. Инструкция else if
- Конструкция if...else в Python:
- Множественный выбор: конструкция else-if
- Выбор: конструкция if-else
- 6.1.5 REPEAT-UNTIL