Когда используются вложенные операторы if, необходимо следить за тем, какому if соответствует конкретное действие else.
Пример:
if(iout_side_temp < 50) /* Если температура на улице ... */
if(iout_side_temp < 30)
printf("Wear the down jacket!");
/*Надеть куртку!*/
else printf ("Parka will do."); /* Достаточно одеть парку. */
Если переменная iout_side_temp равна 55, то не будет напечатано сообщение "Parka will go.". В этом примере действие else связано со вторым выражением if. Это вызвано тем, что в С else связывается с ближайшим несвязанным if.
Для облегчения отладки подобных фрагментов компилятор С написан так, что каждый else связывается с ближайшим if, еще не имеющим части else.
Пример:
if (ycловнoe_выражение1)
if (условное_выражение2)
действие_если_условие2_истина;
else
действие_если_условие1_ложь;
Можно, использовать фигурные скобки:
if(условное_выражение1) {
if(условное_выражение2)
действие_если_условие2_истина;
}
else
действие_если_условие1_ложь;
Действие_если_условие1_ложь связано с частью else действие_если_условие1.
Комбинация операторов if-else-if часто используется для выполнения многочисленных последовательных сравнений. В общем виде они выглядят следующим образом:
if (выражение1)
действие_если_условие1_истина;
else if(выражение2)
действие_если_условие2_истина;
else if (выражениеЗ)
действие_если_условие3_истина;
Каждое действие может быть составным блоком в фигурных скобках (после закрывающей фигурной скобки точка с запятой не ставится). Такая управляющая логическая структура вычисляет каждое выражение до тех пор, пока не найдет истинное. Когда это происходит, все оставшиеся проверочные условия опускаются. В предыдущем примере, если ни одно из выражений не дает значения "истина", никаких действий не выполняется.
Пример:
if (выражение1)
действие_если_условие1_истина;
else if(выражение2)
действие_если_условие2_истина;
else if (выражениеЗ)
действие_если_условие3_истина;
else
действие_по_умолчанию;
Эта комбинация операторов if-else-if всегда выполняет какое-нибудь действие. Если ни одно из выражений не истинно, выполняется часть else, а именно действие_по_умолчанию. Следующий программный пример проверяет значение переменной econvert_to для того, чтобы определить необходимый тип преобразования. Если запрошенное значение econvert_to не соответствует ни одному из предусмотренных преобразований, то программа печатает соответствующее сообщение.
if (econvert_to == YARDS) /* преобразовывать в ярды */
fconverted_value = length / 3;
else if (econvert_to == INCHES) /* ... в дюймы */
fconverted_value = length * 12;
else if (econvert_to == CENTIMETERS) /* ... в сантиметры */ fconverted_vaiue = length * 12 * 2.54;
else if (econvert_to == METERS) /* ... в метры */
fconverted_vaiue = (length * 12 * 2.54)/100;
else
printf ("No conversion required"); /* преобразование не требуется */