[C con Clase] hacer loop con switch
David fire
ddfire en gmail.com
Sab Oct 18 14:55:07 CEST 2008
solo un comentario
NUNCA NUNCA NUNCA uses goto...
El 18 de octubre de 2008 4:30, Steven Davidson <srd4121 en njit.edu> escribió:
> 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
>
>
>
> _______________________________________________
> Lista de correo Cconclase Cconclase en listas.conclase.net
> http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net
> Bajas: http://listas.conclase.net/index.php?gid=2&mnu=FAQ
>
--
(\__/)
(='.'=)This is Bunny. Copy and paste bunny into your
(")_(")signature to help him gain world domination.
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://listas.conclase.net/pipermail/cconclase_listas.conclase.net/attachments/20081018/050ef39c/attachment.html>
Más información sobre la lista de distribución Cconclase