[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