Una sentencia switch
selecciona un fragmento de código
entre varios posibles en base al valor de una expresión
entera. Su estructura es:
switch(selector) { case valor-entero1 : sentencia; break; case valor-entero2 : sentencia; break; case valor-entero3 : sentencia; break; case valor-entero4 : sentencia; break; case valor-entero5 : sentencia; break; (...) default: sentencia; }
selector
es una expresión que produce un
valor entero. El switch
compara el resultado de
selector
para cada valor entero. Si encuentra
una coincidencia, se ejecutará la sentencia correspondiente (sea
simple o compuesta). Si no se encuentra ninguna coincidencia se
ejecutará la sentencia default
.
Se puede observar en la definición anterior que cada
case
acaba con un break
, lo que causa que la
ejecución salte hasta el final del cuerpo del switch
(la llave final que cierra el switch
). Esta es la forma
convencional de construir una sentencia switch
, pero la
palabra break
es opcional. Si no se indica, el
case
que se ha cumplido «cae» al siguiente
de la lista. Esto significa, que el código del siguiente
case
, se ejecutara hasta que se encuentre un
break
. Aunque normalmente no se desea este tipo de
comportamiento, puede ser de ayuda para un programador
experimentado.
La sentencia switch
es una manera limpia de implementar
una selección multi-modo (por ejemplo, seleccionando de entre un
número de paths de ejecución), pero requiere un selector que
pueda evaluarse como un entero en el momento de la
compilación. Si quisiera utilizar, por ejemplo, un objeto
string
como selector, no funcionará en una sentencia
switch
. Para un selector de tipo string
, se
debe utilizar una serie de sentencias if
y comparar el
string
dentro de la condición.
El ejemplo del menu demostrado anteriormente proporciona un
ejemplo particularmente interesante de un switch
:
//: C03:Menu2.cpp // A menu using a switch statement #include <iostream> using namespace std; int main() { bool quit = false; // Flag for quitting while(quit == false) { cout << "Select a, b, c or q to quit: "; char response; cin >> response; switch(response) { case 'a' : cout << "you chose 'a'" << endl; break; case 'b' : cout << "you chose 'b'" << endl; break; case 'c' : cout << "you chose 'c'" << endl; break; case 'q' : cout << "quitting menu" << endl; quit = true; break; default : cout << "Please use a,b,c or q!" << endl; } } } ///:~
Listado 3.7. C03/Menu2.cpp
El flag quit
es un bool
,
abreviatura para «booleano», que es un tipo que
sólo se encuentra en C++. Puede tener únicamente los valores
true
o false
. Seleccionando q
se asigna el valor true
al flag «quit». La
próxima vez que el selector sea evaluado, quit ==
false
retornará false
de modo que el cuerpo del
bucle while
no se ejecutará.