Cuando se coloca una instrucción if dentro de otra se denominan if anidados, y tiene la siguiente estructura:
void main()
{
***
***
***
if (condicion1)
{
***
***
if (condicion2)
{
***
***
}
else
{
***
***
}
}
else
{
if (condicion3)
{
***
***
}
else
{
***
***
}
};
***
***
}
En este programa, se evalúa la condición 1. Si su resultado es verdadero, se ejecuta lo que está en el bloque if (Las instrucciones resaltadas en naranja, entre ellas el segundo if.)
Si el resultado de condición 1 es falso, se ejecuta lo que está en el bloque else, que es el tercer if (resaltado en amarillo).
Cualquiera de los dos if que se ejecute, analizará a su vez la condición correspondiente y elegira el bloque a ejecutar.
Si en alguno de los bloques sólo hay una instrucción no es necesario poner las llaves { } de apertura y cierre de bloque. En este ejemplo, el bloque else del if principal sólo tiene una instrucción (el if de condición 3) por lo que sus llaves no son estrictamente necesarias:
void main()
{
***
***
***
if (condicion1)
{
***
***
if (condicion2)
{
***
***
}
else
{
***
***
}
}
else
if (condicion3)
{
***
***
}
else
{
***
***
} ;
***
***
}
Sin embargo, no están de más y muchas veces es bueno ponerlas siempre, para facilitar la lectura del programa y evitar errores.
Si alguno de los if no tiene bloque else, pueden ocurrir situaciones como la siguiente.
void main()
{
***
***
***
if (condicion1)
if (condicion2)
{
***
***
}
else
{
***
***
}
***
***
}
¿A cuál de los dos if corresponde el bloque else? El C++ interpretará que corresponde al último if sin else que se encuentre en el programa, esto es el if de condicion2. Si el else corresponde al primer if y el segundo no tiene bloque else, se deben agregar las llaves de bloque para indicarlo:
void main()
{
***
***
***
if (condicion1)
{
if (condicion2)
{
***
***
}
}
else
{
***
***
}
***
***
}
Ahora sí, por estar dentro de diferentes niveles de jerarquía, el else no puede pertenecer al segundo if, por lo que el c++ interpretará que éste último no tiene bloque else y el else corresponde al primer if.
Se pueden anidar cualquier cantidad de niveles, pero no es recomendable anidar más de dos o tres niveles de if, ya que de lo contrario sería muy confuso de leer. Para evitar más niveles, se puede recurrir a operadores relacionales y combinar varias condiciones simples en una compuesta.
No hay comentarios:
Publicar un comentario