Оператор if является вложенным, если он вложен, т.е. находится внутри другого оператора if или else. В практике программирования вложенные условные операторы используются довольно часто. Во вложенном условном операторе фраза else всегда ассоциирована с ближайшим if в том же блоке, если этот if не ассоциирован с другой фразой else. Например:
if(i)
{
if(j) statement 1;
if(k) statement 2; /* этот if */
else statement 3; /* ассоциирован с этим else */
}
else statement 4; /* ассоциирован с if(i) */
Последняя фраза else не ассоциирована с if(j) потому, что она находится в другом блоке. Эта фраза else ассоциирована с if(i). Внутренняя фраза else ассоциирована с if(k), потому что этот if — ближайший.
Стандарт С89 допускает 15 уровней вложенности условных операторов, С99 — 127 уровней. В настоящее время большинство компиляторов допускают значительно большее количество уровней вложенности. Однако на практике необходимость в глубине вложенности, большей, чем несколько уровней, возникает довольно редко, так как увеличение глубины вложенности быстро запутывает программу и делает ее нечитаемой.
В следующем примере вложенный оператор if используется в модернизированной программе для игры в магическое число. С его помощью играющий получает сообщение о характере ошибки:
/* Магическое число, программа N3. */
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
int magic; /* магическое число */
int guess; /* попытка игрока */
magic = rand(); /* генерация магического числа */
printf("Угадай магическое число: ");
scanf("%d", &guess);
if (guess == magic) {
printf("** Верно **");
printf("Магическое число равно %d\n", magic);
}
else {
printf("** Неверно, ");
if(guess > magic) printf("слишком большое\n");
/* вложенный if */
else printf("слишком малое\n");
}
return 0;
}