Disponible la nueva versión "donationware" 7.3 de OrganiZATOR
Descubre un nuevo concepto en el manejo de la información.
La mejor ayuda para sobrevivir en la moderna jungla de datos la tienes aquí.

Curso C++

[Home]  [Inicio]  [Índice]


4.10.1  Sentencias de etiqueta

§1  Sinopsis

Recordemos ( 1.2.1) que en C++ las sentencias pueden estar provistas de un identificador o etiqueta que sirve para identificarlas como destino de algunas sentencias de salto.

Las sentencias C++ pueden ser etiquetadas de dos formas:

a.  Mediante una etiqueta directa:

etiqueta-identificativa:

b.  Las sentencias case y default (que se utilizan en conjunción con switch) en la forma:

case expresion-constante : sentencia
default : sentencia

§2  Etiqueta directa

Una etiqueta ("Label") es un identificador seguido de dos puntos ( : ). Sigue las mismas reglas que los identificadores del resto de entidades del programa ( 3.2.2) y su ámbito es el de la función en que ha sido definida. Sirve de destino para la sentencia goto ( 4.10.4) de salto incondicional.

Ejemplo

Destino:        // esta es la etiqueta
;
...
goto Fin;       // Ok la etiqueta estaría más adelante
...
goto Destino;   // salta a la etiqueta

§3  case

La sentencia case se utiliza en conjunción con switch para determinar en que sentencia debe continuar la ejecución del programa de entre una serie de puntos posibles. Se trata por tanto de una sentencia de salto condicionado.

§3.1  Sintaxis

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

§3.2  Descripción

  <expresion constante> debe evaluarse a un int y ser un valor único dentro de los posibles case del bloque switch (no deben existir valores duplicados).

Las diversas <expresion constante> del bucle son evaluadas, y sus valores comparados con el de la <variable switch>. Si no existe ninguna concordancia la ejecución sigue en la sentencia default. En cambio, si se encuentra una coincidencia entre ambas, se ejecuta la <sentencia> correspondiente y la ejecución continúa en este punto. Por esta razón, si no se desea que se ejecuten el resto de las sentencias case, a continuación de la que propicia la concordancia, deben incluirse instrucciones break ( 4.10.4) para saltar al final del bloque.

§4  default

La sentencia default se utiliza en los bloques switch junto con los case. Si no existe concordancia de la <variable switch> con ninguno de los valores case, se ejecuta la sentencia por defecto, señalada por default.

§4.1  Sintaxis

switch ( <variable switch> ){
  case <expresion> : <sentencia>; [break;]
    .
    .
    .
  default : <sentencia>;
}

§4.2  Descripción

Los valores case y default pueden aparecer en cualquier orden, aunque lo usual es colocar default al final. Ver ejemplo .

La sentencia default es opcional dentro del bloque switch. Si no existe concordancia con ningún case y no existe sentencia default, entonces la ejecución continúa en la siguiente sentencia después del bloque switch. Es decir, no se ejecuta ninguna sentencia del mismo.

§5  Ejemplo:

En este código se muestra el uso de las palabras reservadas break, case, default y switch

#include <conio.h>
#include <iostream>
using namespace std;
 
int main(void) {           // ===================
   int ch;
   cout << "Presione a, b, O c. Cualquier otra termina el programa" << endl
   for ( /* BUCLE INFINITO */; ((ch = getch()) != EOF); )
      switch (ch) {
         case 'a' :        // La selección 'a' tiene su propio caso
            cout << "Seleccionado " << 'a' << endl;
            break;
         case 'b' :        // Es lo mismo seleccionar 'b' o 'c'
         case 'c' :
            cout << "Seleccionado 'b' o 'c'" << endl;
            break;
         default :
            cout << "SELECCION NO VALIDA!  Adios..." << endl;
            return(-1);
      }
   return(0);
}


Comentario

El bloque switch funciona como una sola sentencia para el bucle exterior for. Cada vez que se pulsa una tecla, es el bucle switch el que decide el curso de la acción. Las sentencias break ( 4.10.4) hacen saltar fuera del bucle switch, volviendo por tanto al bucle for, que espera hasta la sigiente pulsación en el teclado.