• Domingo 28 de Abril de 2024, 22:25

Autor Tema:  Problemas con mi menú.  (Leído 2032 veces)

Aprendiz21Sam

  • Miembro activo
  • **
  • Mensajes: 32
    • Ver Perfil
Problemas con mi menú.
« en: Martes 19 de Enero de 2010, 21:22 »
0
Verán, estoy haciendo un programa en "C" que hace conversiones de unidades de siete tipos. El problema que tengo es a la hora de moverme por el menú. Les pondré sólo parte del código para que entiendan lo que quiero decirles.

Código: C
  1. /*Bibliotecas de C*/
  2.  
  3. #include <stdio.h>
  4. #include <conio.h>
  5. #include <ctype.h>
  6.  
  7. /*Cabecera de las funciones*/
  8. void UnidadesDeLongitud ();
  9. void UnidadesDeMasa();
  10. void UnidadesDeTiempo();
  11. void UnidadesDeVolumen();
  12. void UnidadesDeTemperatura();
  13. void UnidadesDeSuperficie();
  14. void UnidadesDeOrdenador();
  15.  
  16. /*Programa principal*/
  17. int main()
  18. {
  19.     /*Variables del programa principal*/
  20.     char Opcion;
  21.     char Cad[80];
  22.     /*Valor de las variables*/
  23.    
  24.     /*Petición de datos*/
  25.     do
  26.     {
  27.       printf ("n--------------------------MENU--------------------------");
  28.       printf ("nELIJA UNA OPCION PARA REALIZAR SU TIPO DE CONVERSION");
  29.       printf ("nA: Unidades de longitud");
  30.       printf ("nB: Unidades de masa");
  31.       printf ("nC: Unidades de tiempo");
  32.       printf ("nD: Unidades de volumen");
  33.       printf ("nE: Unidades de temperatura");
  34.       printf ("nF: Unidades de superficie");
  35.       printf ("nG: Unidades de ordenador");
  36.       printf ("nS: Salir");
  37.       fgets(Cad, sizeof(Cad), stdin);
  38.       sscanf (Cad, "%c", &Opcion);
  39.       Opcion = toupper (Opcion);
  40.       /*Algoritmo principal*/
  41.       switch (Opcion)
  42.       {
  43.            case 'A': UnidadesDeLongitud();
  44.                      break;
  45.            case 'B': UnidadesDeMasa();
  46.                      break;
  47.            case 'C': UnidadesDeTiempo();
  48.                      break;
  49.            case 'D': UnidadesDeVolumen();
  50.                      break;
  51.            case 'E': UnidadesDeTemperatura();
  52.                      break;
  53.            case 'F': UnidadesDeSuperficie();
  54.                      break;
  55.            case 'G': UnidadesDeOrdenador();
  56.                      break;
  57.            default : if (Opcion != 'S')
  58.                      {
  59.                         printf ("nOpcion Incorrecta");
  60.                      }
  61.       }
  62.     }
  63.     while (Opcion != 'S');
  64.  

Según la opción que elija, entrará en uno de esos apartados (que serán procedimientos), mediante un "switch". Hasta aquí todo bien. Ahora entramos por ejemplo en "UnidadesDeLongitud" (presionando la letra a). Y tenemos lo siguiente:



Código: C
  1. void UnidadesDeLongitud ()
  2. {
  3.      /*Variables del subalgoritmo*/
  4.      char Opcion, Opcion2;
  5.      char Cad[80];
  6.      float Milimetros, Centimetros, Decimetros, Metros, Decametros, Hectometros, Kilometros;
  7.  
  8.      /*Menu del subalgoritmo*/
  9.      do
  10.      {
  11.        printf ("nIndique en que desea insertar la cantidad");
  12.        printf ("nA: Metros");
  13.        printf ("nB: Decimetros");
  14.        printf ("nC: Centimetros");
  15.        printf ("nD: Milimetros");
  16.        printf ("nE: Decametros");
  17.        printf ("nF: Hectometros");
  18.        printf ("nG: Kilometros");
  19.        printf ("nS: Volver al menu principal");
  20.        fgets(Cad, sizeof(Cad), stdin);
  21.        sscanf (Cad, "%c", &Opcion);
  22.        Opcion = toupper (Opcion);
  23.        printf ("nIndique por favor a que unidades desea pasarlo");
  24.        printf ("nA: Metros");
  25.        printf ("nB: Decimetros");
  26.        printf ("nC: Centimetros");
  27.        printf ("nD: Milimetros");
  28.        printf ("nE: Decametros");
  29.        printf ("nF: Hectometros");
  30.        printf ("nG: Kilometros");
  31.        fgets(Cad, sizeof(Cad), stdin);
  32.        sscanf (Cad, "%c", &Opcion2);
  33.        Opcion2 = toupper (Opcion2);
  34.        /*El procedimiento sigue pero no es relevante*/
  35.  

Aquí es donde tengo el problema. Si se fijan en este procedimiento, en la opción "S", se dice que vuelve al menú principal. Mi problema es que no se como hacer eso. ¿Cómo puedo hacer que vuelva al menú del programa principal que les puse anteriormente?

Gracias de antemano. Espero que estos problemillas no sean sólo pérdida de tiempo para los mas avanzados, pero realmente no se me ocurre como hacer esto sin utilizar "goto", y "goto" es algo prohibido en mi clase así que no puedo usarlo.

Otra cosa que quería saber es: ¿Cómo hago para que cuando pulse una opción no aparezca escrita en la consola, sino que directamente entre en la opción? Gracias.

Aprendiz21Sam

  • Miembro activo
  • **
  • Mensajes: 32
    • Ver Perfil
Re: Problemas con mi menú.
« Respuesta #1 en: Martes 19 de Enero de 2010, 22:09 »
0
Ya modifiqué los "scanf". Pero sigo teniendo la duda de como moverme por el menú hacia atrás.

También he encontrado otros problemas pero me gustaría plantearlos una vez que resuelva lo del menú.

Gracias.

Eternal Idol

  • Moderador
  • ******
  • Mensajes: 4696
  • Nacionalidad: ar
    • Ver Perfil
Re: Problemas con mi menú.
« Respuesta #2 en: Martes 19 de Enero de 2010, 22:14 »
0
Sali del bucle (el de la funcion UnidadesDeLongitud) y retorna al main.

Nacional y Popular En mi país la bandera de Eva es inmortal.


Queremos una Argentina socialmente justa, económicamente libre y  políticamente soberana.
¡Perón cumple, Evita dignifica!


La mano invisible del mercado me robo la billetera.

Aprendiz21Sam

  • Miembro activo
  • **
  • Mensajes: 32
    • Ver Perfil
Re: Problemas con mi menú.
« Respuesta #3 en: Martes 19 de Enero de 2010, 22:24 »
0
Ok, menuda tonteria, estoy un poco tonto jaja.  Vale eso si me funciona. Ahora hay unas cosas que no me funcionan, como el clear screen.

Utilizo la función clrscr(); en algunos puntos para que se vea un menú nuevo sin lo anterior, pero me da el siguiente error.

Citar
C:Dev-CppEjerciciosProgramacionLetraNum.cpp In function `void UnidadesDeLongitud()':
97 C:Dev-CppEjerciciosProgramacionLetraNum.cpp `clrscr' undeclared (first use this function)
  (Each undeclared identifier is reported only once for each function it appears in.)

La otra pregunta era la que hice antes. ¿Cómo hago para que al pulsar una opción no se escriba la letra que escribo, sino que directamente entre a dicha opción cuando pulso tal letra?

Gracias por contestarme a todas mis locuras jejejeje.

Aprendiz21Sam

  • Miembro activo
  • **
  • Mensajes: 32
    • Ver Perfil
Re: Problemas con mi menú.
« Respuesta #4 en: Martes 19 de Enero de 2010, 23:31 »
0
Lo del clrscr(); ya lo he resuelto, y es que resulta que eso está sólo en "Borlan C". Asique he usado el "system ("CLS); y arreglado. Ahora me falta por averiguar lo de pulsar la opción si que se escriba en la pantalla. Bueno siempre que no me respondas antes de que lo encuentre jejeje.

Gracias de antemano.

Eternal Idol

  • Moderador
  • ******
  • Mensajes: 4696
  • Nacionalidad: ar
    • Ver Perfil
Re: Problemas con mi menú.
« Respuesta #5 en: Martes 19 de Enero de 2010, 23:43 »
0
Ambas cosas son no standard, a menos que te exigan hacerlas es preferible obviarlas, no agregan nada y hacen que el programa sea no standard.

Nacional y Popular En mi país la bandera de Eva es inmortal.


Queremos una Argentina socialmente justa, económicamente libre y  políticamente soberana.
¡Perón cumple, Evita dignifica!


La mano invisible del mercado me robo la billetera.