• Viernes 3 de Mayo de 2024, 18:51

Mostrar Mensajes

Esta sección te permite ver todos los posts escritos por este usuario. Ten en cuenta que sólo puedes ver los posts escritos en zonas a las que tienes acceso en este momento.


Mensajes - Aprendiz21Sam

Páginas: 1 [2]
26
C/C++ / Re: Problema con bucle.
« en: Martes 19 de Enero de 2010, 21:46 »
De acuerdo gracias por las explicaciones. En la otra pregunta que he hecho de otro programa que estoy realizando, modificare los "scanf" por lo que me dijiste.

Duda sobre "scanf" y bucle resuelta.

Gracias.

27
C/C++ / Problemas con mi menú.
« 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.

28
C/C++ / Re: Problema con bucle.
« en: Martes 19 de Enero de 2010, 18:57 »
Gracias por la explicación. Entonces si no me equivoco, aunque sea un poco enrevesado, podría escribirlo de este modo...

 
Código: C
  1.   while (Salir != 's' && Salir != 'S')
  2.     {
  3.       printf ("nEscriba un numero para determinar su simbolo: ");
  4.       scanf ("%d", &Letra);
  5.       A = Letra;
  6.       printf ("n%d = %c", Letra, A);
  7.       printf ("nPulse 'S' para salir u otra tecla para poner otro numero: ");
  8.       fflush (stdin);
  9.       scanf ("%c", &Salir);
  10.     }
  11.  

Una pregunta mas ya que eres moderador. ¿Si tengo mas dudas sigo con este hilo o creo otro nuevo?

29
C/C++ / Re: Problema con bucle.
« en: Martes 19 de Enero de 2010, 18:25 »
Vaya gracias. Ahora si funciona pero tengo algunas dudas.
Veras yo utilizo muy pocos recursos para hacer programas con los que debería usar otros recursos. Por ejemplo, para un número aleatorio no utilizo las funciones de rand, etc. Lo que sí me gustaría saber es por qué no funcionaba mi "scanf ("%c", Salir);".

Gracias de antemano.

30
C/C++ / Re: Problema con bucle.
« en: Martes 19 de Enero de 2010, 17:54 »
Sigo teniendo un problemilla. El while ahora si funciona, pero el bucle en si no, porque no me deja escribir el valor de "Salir.

Código: C
  1.  while (Salir != 's' && Salir != 'S')
  2.     {
  3.       printf ("nEscriba un numero para determinar su simbolo: ");
  4.       scanf ("%d", &Letra);
  5.       A = Letra;
  6.       printf ("n%d = %c", Letra, A);
  7.       printf ("nPulse 'S' para salir u otra tecla para poner otro numero: ");
  8.       scanf ("%c", &Salir);
  9.     }
  10.  

El último scanf no se ejecuta nunca.

Gracias de antemano.

31
C/C++ / Problema con bucle.
« en: Martes 19 de Enero de 2010, 17:38 »
Hola, tengo un problema con este bucle que no me funciona.

Este es el programa. Entro en el bucle y me pregunta el número. Se lo doy y me da el símbolo, hasta ahí todo bien. Entonces me pregunta que si quiero pulse S para salir, pero no me da la opción de pulsar nada, sino que se salta el scanf ("%c", &Salir); y vuelve a entrar en el bucle. También he probado el while y no funciona, es decir, he probado a poner el valor de salir directamente en 'S' y sigue entrando. ¿Alguna explicación? Gracias de antemano.

Código: C
  1. /*Bibliotecas de C*/
  2.  
  3. #include <stdio.h>
  4. #include <conio.h>
  5.  
  6. /*Cabecera de las funciones*/
  7.  
  8. /*Programa pincipal*/
  9. int main()
  10. {
  11.     /*Variables del programa principal*/
  12.     int Letra;
  13.     char A;
  14.     char Salir;
  15.     /*Valor de las variables*/
  16.    
  17.     /*Petición de datos*/
  18.     while (Salir != 's' or Salir != 'S')
  19.     {
  20.       printf ("nEscriba un numero para determinar su simbolo: ");
  21.       scanf ("%d", &Letra);
  22.       A = Letra;
  23.       printf ("n%d = %c", Letra, A);
  24.       printf ("nPulse 'S' para salir u otra tecla para poner otro numero: ");
  25.       scanf ("%c", &Salir);
  26.     }
  27.     /*Algoritmo principal*/
  28.    
  29.     /*Salida de datos*/
  30.    
  31.     /*Otros*/
  32.     getch();
  33.     return 0;
  34. }
  35.  

32
C/C++ / Re: { duda } donde colocar el default...
« en: Martes 19 de Enero de 2010, 16:03 »
Lo primero de todo es que este programa no hace nada. Sólo te da para que escribas por pantalla lo que quieras y si da la casualidad de que es una de esas letras pues ésta se incrementa en uno. Luego no muestras el valor ni haces nada con ellas asi que el programa no tiene mucho sentido.

Si que veo un fallo claro en las condiciones. Dentro del "if" no se pone "break;", esto se pone solo en los switches. De todas formas, el programa que quieres hacer, que no hace nada se quedaría bien así.
Citar
Código: C
  1. #include <stdio.h>
  2. #include <conio.h>
  3.  
  4. int main()
  5. {
  6.     int calif, aa = 0,bb = 0,cc = 0,dd = 0,ee = 0,ff = 0;
  7.  
  8.     while ( ( calif = getchar()) != EOF )
  9.     {
  10.         scanf("%d", &calif);
  11.         if (calif == 'a')
  12.         {
  13.             aa++;
  14.         }
  15.             if (calif == 'b')
  16.             {
  17.                 bb++;
  18.             }
  19.  
  20.                 if (calif == 'c')
  21.                 {
  22.                     cc++;
  23.                 }
  24.                     if (calif == 'd')
  25.                     {
  26.                         dd++;
  27.                     }
  28.                         if (calif == 'e')
  29.                         {
  30.                             ee++;
  31.                         }
  32.                             if (calif == 'f')
  33.                             {
  34.                                 ff++;
  35.                             }
  36.                                 if (calif == ' ' || calif == 'n')
  37.                                 {
  38.                                 }
  39.     }
  40.     getch();
  41.     return 0;
  42. }
  43.  

Pero te repito que este programa no hace nada.

Páginas: 1 [2]