[C con Clase] hacer loop con switch
Steven Davidson
srd4121 en njit.edu
Sab Oct 18 09:30:48 CEST 2008
Hola Marco,
Marco Ibarra wrote:
> Soy nuevo en C++ y tambien en la lista de correo, estuve buscando la
Antes de continuar, te doy la bienvenida a la lista y a este mundo de C++.
> manera de regresar al principio de un switch sin la necesidad de goto
> (en caso de que exista tal manera), como ejemplo el siguiente codigo:
Veamos el código.
>
> cout<<"El siguiente programa le permite realizar conversiones de grados Celsius"<<endl;
> cout<<"y grados Fahrenheit. Para comenzar:"<<endl<<endl;
>
>
> start1:
> cout<<"Seleccione la escala que desea convertir: " <<endl;
> cout<<"Celsius(1), Fahrenheit(2)." << endl<<endl;
>
> //seleccion de escala y conversion
>
> int escala;
> float celsius, fahrenheit;
> cin>> escala;
>
> start:
>
> switch (escala){
> case 1:
>
> cout<<"Ingrese grados Celsius:"<<endl;
> cin>> celsius;
> fahrenheit=celsius*9/5+32;
> cout<<endl<<endl<<celsius<<" grados Celsius, equivalen a "
> <<fahrenheit<<" Grados Fahrenheit"<<endl<<endl;
> break;
>
> case 2:
> cout<<"Ingrese grados Fahrenheit:"<<endl;
> cin>> fahrenheit;
> celsius=fahrenheit-32*5/9;
> cout<<endl<<endl<<fahrenheit<<" grados Fahrenheit equivalen a "
> <<celsius<<" Grados Celsius"<<endl<<endl;
> break;
>
> default:
>
> cout<<endl<<"Seleccion incorrecta, ingrese una opcion valida."
> <<endl<<"Celsius(1), Fahrenheit(2)";
> cout<<endl<<endl;
> cin>>escala;
> goto start;
Podrías usar 'continue' en lugar de 'goto', ya que volverás a ejecutar
esta sentencia de 'switch/case'. De todas maneras, no sugiero hacer
esto. En su lugar, usa bucles, como puede ser 'do/while'. Por ejemplo,
bool bRepetir = false;
do
{
...
switch( escala )
{
case 1:
...
break;
case 1:
...
break;
default:
...
bRepetir = true;
}
} while( bRepetir );
Usando una variable booleana podemos controlar si debemos repetir estas
sentencias o no.
> }
>
> //repetir o salir del programa
>
> char rep;
> cout<<endl<<"Desea realizar otra operacion?"<<endl;
> cout<<"Presione (r)para repetir, o cualquier tecla para salir."<<endl<<endl;
> cin>>rep;
>
> if (rep == 'r')
> goto start1;
>
Aquí ocurre lo mismo. Si queremos repeticiones, entonces requerimos
bucles. Nuevamente, podemos usar un bucle 'do/while' en este caso. El
esquema sería el siguiente:
do
{
cout<<"Seleccione la escala que desea convertir: " <<endl;
cout<<"Celsius(1), Fahrenheit(2)." << endl<<endl;
...
bool bRepetir = false;
do
{
...
switch( escala )
{
...
}
} while( bRepetir );
...
} while( 'r' == rep );
> else {
> cout<<endl<<endl<<endl
> <<"****Gracias por utilizar este programa, Hasta luego!!****"<<endl;
> }
>
>
> cin.get();
> cin.get();
> return 0;
> }
>
> Al parecer el codigo ya compilado funciona tal como deveria, pero no
> dejo de pensar en goto.
>
Deberías dejar de pensar en 'goto'. Existen demasiados peligros y
quebraderos de cabeza que no merece la pena usar este vocablo. Como ya
he mencionado antes, si tu diseño necesita repetir, entonces automática
e inmediatamente deberías pensar en usar bucles. C++ te ofrece tres
diferentes tipos de bucles, por lo que tienes donde elegir.
Espero que esto te aclare el tema.
Steven
Más información sobre la lista de distribución Cconclase