SoloCodigo

Programación General => C/C++ => Mensaje iniciado por: Aprendiz21Sam en Martes 19 de Enero de 2010, 21:22

Título: Problemas con mi menú.
Publicado por: Aprendiz21Sam en Martes 19 de Enero de 2010, 21:22
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.
Título: Re: Problemas con mi menú.
Publicado por: Aprendiz21Sam en Martes 19 de Enero de 2010, 22:09
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.
Título: Re: Problemas con mi menú.
Publicado por: Eternal Idol en Martes 19 de Enero de 2010, 22:14
Sali del bucle (el de la funcion UnidadesDeLongitud) y retorna al main.
Título: Re: Problemas con mi menú.
Publicado por: Aprendiz21Sam en Martes 19 de Enero de 2010, 22:24
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.
Título: Re: Problemas con mi menú.
Publicado por: Aprendiz21Sam en Martes 19 de Enero de 2010, 23:31
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.
Título: Re: Problemas con mi menú.
Publicado por: Eternal Idol en Martes 19 de Enero de 2010, 23:43
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.