Acerca de switch

Iniciado por eleon, 21 Enero 2012, 14:56 PM

0 Miembros y 1 Visitante están viendo este tema.

eleon

Hi:

Tengo una duda en C++, según he leído el análisis de casos (switch) solo puede llevar un entero o caracter, ¿entonces cómo se haría para un número real o un booleano?.

Y también me gustaría saber cómo se ponen los rangos o periodos en C++, por ejemplo, en pascal para poner que se ejecute una instrucción en el caso de que la variable o contante tenga el valor del 1 al 5 se hace lo siguiente:

case variable of begin
1..5: //Instrucción a ejecutar
5..10: //Instrucción a ejecutar
end;


Como veis los dos puntos (..) le dicen al compilador que en caso de que "variable" tenga el valor del 1 al 5 se ejecute la instrucción, ¿cómo se marcan los periodos en C++?.

Gracias.

rir3760

Cita de: eleon en 21 Enero 2012, 14:56 PMTengo una duda en C++, según he leído el análisis de casos (switch) solo puede llevar un entero o caracter, ¿entonces cómo se haría para un número real o un booleano?.
No es posible ya que, como bien indicas, solo puedes utilizar valores enteros. En el caso de un valor booleano utilizado como expresión este resulta en 1 si es verdadero y 0 si es falso.

Cita de: eleon en 21 Enero 2012, 14:56 PMY también me gustaría saber cómo se ponen los rangos o periodos en C++, por ejemplo, en pascal para poner que se ejecute una instrucción en el caso de que la variable o contante tenga el valor del 1 al 5 se hace lo siguiente:

case variable of begin
1..5: //Instrucción a ejecutar
5..10: //Instrucción a ejecutar
end;


Como veis los dos puntos (..) le dicen al compilador que en caso de que "variable" tenga el valor del 1 al 5 se ejecute la instrucción, ¿cómo se marcan los periodos en C++?.
De nuevo no es posible. Si se trata de un numero pequeño de valores puedes colocar los casos uno después del otro de esta forma:
Código (cpp) [Seleccionar]
switch (opcion){
case 1:
case 2:
case 3:
case 4:
case 5:
   // Procesamos aqui el rango 1 .. 5
   break;
}

Pero si el rango es mayor no hay alternativa: debes utilizar una sentencia de selección "if" en su lugar.

Un saludo
C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language

eleon

#2
Gracias, he confirmado las dos cosas. Lo cierto es que al poner en el switch una variable booleana se puede hacer lo siguiente:

Código (cpp) [Seleccionar]
bool variable;
switch (variable)
{
    case true: //Instrucciones
    case false: //Instrucciones
}



No da ningún error y se ejecuta correctamente. Una cosa a tener en cuenta es que hablo de C++ no de C.

Saludos.

x64core

toma en cuenta que en ese ejemplo tuyo si en un expresion da como resultado true, salta al case true pero tambien se ejecuta false, para eso debes de poner la instruccion break para que haga un salto al final del switch  y tambien existe un case por defecto que se usa con la etiqueta default

El_Java

CitarNo da ningún error y se ejecuta correctamente. Una cosa a tener en cuenta es que hablo de C++ no de C.
Claro que hablas de C++, en C no existe la variable de tipo bool.
Un booleano en un switch funciona porque en definitiva un bool es un int que solo puede tener los valores 0 y 1 (false y true), es por eso que también funciona en el switch. Tambien funcionaria con valores con coma flotante (float, double) pero deberias poner switch((int)variable) con lo que harias un casting a int y perderias todos los decimales.

Un saludo.