Curso de C++ (Página 5c)

pagina005b Principal pagina005d

CAPITULO 5c Sentencias

Etiquetas

Los programas C y C++ se ejecutan secuencialmente, aunque esta secuencia puede ser interrumpida de varias maneras. Las etiquetas son la forma en que se indica al compilador en qué puntos será reanudada la ejecución de un programa cuando haya una ruptura del orden secuencial.

Etiquetas de identificación

Corresponden con la siguiente sintaxis:

<identificador>: <sentencia>

Sirven como puntos de entrada para la sentencia de salto "goto". Estas etiquetas tienen el ámbito restringido a la función dentro de la cual están definidas. Veremos su uso con más detalle al analizar la sentencia "goto".

Etiquetas "case" y "default"

Esta etiqueta se circunscribe al ámbito de la sentencia "switch", y se verá su uso cuando estudiemos ese apartado. Sintaxis:

switch(<variable>)
{
   <expresión constante>: [<sentencias>[...<sentencia>]][break;]
   . . . 
   default: [<sentencias>[<sentencia>...]] 
}

Selección

Las sentencias de selección permiten controlar el flujo del programa, seleccionando distintas sentencias en función de diferentes valores.

Sentencia "if...else"

Implementa la ejecución condicional de una sentencia. Sintaxis:

if (<condición>) <sentencia1>

if (<condición>) <sentencia1> else <sentencia2>

Se pueden declarar variables dentro de la condición. Por ejemplo:

if(int val = func(arg))... 

En este caso, la variable "val" sólo estará accesible dentro del ámbito de la sentencia "if" y, si existe, del "else".

Si la condición es "true" se ejecutará la sentencia1, si es "false" se ejecutará la sentencia2.

El "else" es opcional, y no pueden insertarse sentencias entre la sentencia1 y el "else".

Sentencia "switch"

Cuando se usa la sentencia "switch" el control se transfiere al punto etiquetado con el "case" cuya expresión constante coincida con el valor de la variable del "switch", no te preocupes, con un ejemplo estará más claro. A partir de ese punto todas las sentencias serán ejecutadas hasta el final del "switch", es decir hasta llegar al "}". Esto es así porque las etiquetas sólo marcan los puntos de entrada después de una ruptura de la secuencia de ejecución, pero no marcan las salidas.

Esta característica nos permite ejecutar las mismas sentencias para varias etiquetas distintas, y se puede eludir usando la sentencia de ruptura "break" al final de las sentencias incluidas en cada "case".

Si no se satisface ningún "case", el control parará a la siguiente sentencia después de la etiqueta "default". Esta etiqueta es opcional y si no aparece se abandonará el "switch".

Sintaxis:

switch (<variable>) 
{
   case <expresión constante>: <sentencia>[... <sentencia>] [break;]
   . . .
   [default : <sentencia>]
}

Por ejemplo:

switch(letra) 
{ 
   case 'a': 
   case 'e': 
   case 'i': 
   case 'o': 
   case 'u': 
      EsVocal = true; 
      break; 
   default: 
      EsVocal = false; 
}

En este ejemplo letra es una variable de tipo "char" y EsVocal de tipo "bool". Si el valor de entrada en el "switch" corresponde a una vocal, EsVocal saldrá con un valor verdadero, en caso contrario, saldrá con un valor falso. El ejemplo ilustra el uso del "break", si letra es 'a', se cumple el primer "case", y la ejecución continúa en la siguiente sentencia, ignorando el resto de los "case" hasta el "break".

Otro ejemplo:

Menor1 = Menor2 = Menor3 = Mayor3 = false;
switch(numero) 
{ 
   case 0:
      Menor1 = true; 
   case 1: 
      Menor2 = true;
   case 2: 
      Menor3 = true; 
      break; 
   default: 
      Mayor3 = true; 
}

Veamos qué pasa en este ejemplo si número vale 1. Directamente se reanuda la ejecución en "case 1:", con lo cual Menor2 tomará el valor "true", lo mismo pasará con Menor3. Después aparece el "break" y se abandona el "switch".


pagina005b Principal pagina005d