Один из наиболее трудных аспектов использования операторов 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;
}