Программирование на C и C++

Онлайн справочник программиста на C и C++

Вложенные if

Один из наиболее трудных аспектов использования операторов if в любом языке программирования - это вложенность операторов if. Под вложенным if подразумевается оператор if, имеющий еще один if или else. Причина того, что вложенность операторов if вызывает такие проблемы, заключается в трудностях идентификации: какое else соответствует какому if. Например:

if (x)

    if (у) printf("1");

   else printf("2");

Какому if соответствует какое else?

К счастью, С предоставляет очень простое правило для разрешения такого рода проблем. В С else соответствует ближайшему предшествующему if (на том же уровне видимости), еще не имеющему оператора else. В данном случае else связан с оператором if (у). Для того, чтобы связать else с оператором if (х), следует использовать фигурные скобки, как показано ниже:
f (x) {
    if (у) printf ("1");
}
else printf ("2");

Теперь else связано с if (x), поскольку он не принадлежит больше блоку if (у). Из-за правил видимости С else теперь не знает об операторе if (у), поскольку он находится на другом уровне.

Дальнейшее улучшение программы предоставляет возможность игроку узнать, как близко он был к победе. Это реализуется с помощью вложенных if:

#include <stdio.h>

/* программа "угадай число 3" */

int main(void)
{
int magic = 123; /* искомое число */
int guess;
printf("Enter your guess: ");
scanf("%d", &guess);
if(guess == magic) {
printf("** Right ** ");
printf("%d is the magic number", magic);
}
else {
printf(".. Wrong .. ");
if(guess > magic) printf("Too high");
else printf("Too low");
}
return 0;
}