netlib.narod.ru< Назад | Оглавление | Далее >

3.2. Конструкция if-else

Инструкция 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< Назад | Оглавление | Далее >

Сайт управляется системой uCoz