Page 56

1.17 Estructuras de control La sentencia de selecci´ on if -else Hay una forma if -else, como en Python: if (condici´ on) { sentencias_si } else { sentencias_no }

Si uno de los bloques s´ olo tiene una sentencia, generalmente puedes eliminar las llaves: if (condici´ on) sentencia_si; else { sentencias_no } if (condici´ on) { sentencias_si } else sentencia_no; if (condici´ on) sentencia_si; else sentencia_no;

Ojo: la indentaci´ on no significa nada para el compilador. La ponemos u ´nicamente para facilitar la lectura. Pero si la indentaci´on no significa nada nos enfrentamos a un problema de ambig¨ uedad con los if anidados: if (condici´ on) if (otra_condici´ on) { sentencias_si } else { // ??? sentencias_no } ?? ?

¿A cu´al de los dos if pertenece el else? ¿Har´a el compilador de C una interpretaci´on como la que sugiere la indentaci´ on en el u ´ltimo fragmento o como la que sugiere este otro?: if (condici´ on) if (otra_condici´ on) { sentencias_si } else { // ??? sentencias_no } ???

C rompe la ambig¨ uedad trabajando con esta sencilla regla: el else pertenece al if ((libre)) m´ as cercano. Si quisi´eramos expresar la primera estructura, deber´ıamos a˜ nadir llaves para determinar completamente qu´e bloque est´a dentro de qu´e otro: if (condici´ on) { if (otra_condici´ on) { sentencias_si } } else { sentencias_no }

El if externo contiene una sola sentencia (otro if ) y, por tanto, las llaves son redundantes; pero hacen evidente que el else va asociado a la condici´on exterior. 50

Introducci´ on a la Programaci´ on con C

Profile for esLibre.com

Introducción a la programación con c  

Introducción a la programación con c  

Advertisement