Foros del Web » Programación para mayores de 30 ;) » C/C++ »

Ayuda no se que pasa

Estas en el tema de Ayuda no se que pasa en el foro de C/C++ en Foros del Web. Lo que pasa es que cree un programa (para un trabajo en la universidad) pero al momento de correrlo no espera que ingrese nada, corre ...
  #1 (permalink)  
Antiguo 18/07/2010, 19:02
 
Fecha de Ingreso: julio-2010
Mensajes: 3
Antigüedad: 13 años, 9 meses
Puntos: 0
Ayuda no se que pasa

Lo que pasa es que cree un programa (para un trabajo en la universidad) pero al momento de correrlo no espera que ingrese nada, corre todo hasta el segundo ingreso de datos...

Ayuda :(

Código C:
Ver original
  1. #include <stdio.h>
  2. #include <string.h>
  3.  
  4. main (){
  5.     int seleccion, longitud;
  6.     char f1[20], f2[20];
  7.     do{
  8.         printf ("1. Verificar si dos frases son iguales\n");
  9.         printf ("2. Calcular cuantas letras posee una oracion\n");
  10.         printf ("3. Juntar dos frases\n");
  11.         printf ("4. Copiar una frase en otra variable\n");
  12.         printf ("5. Salir\n");
  13.        
  14.         printf ("Ingrese su opcion: ");
  15.         scanf ("%d", &seleccion);
  16.        
  17.         switch (seleccion){
  18.             case 1:
  19.                 printf("Ingrese primera frase :\n");
  20.                 fgets(f1, 20, stdin);
  21.  
  22.                 printf("Ingrese segunda frase:\n");
  23.                 fgets(f2, 20, stdin);
  24.  
  25.                 if (strcmp(f1,f2) == 0) {
  26.                          printf("Las frases son iguales.\n");
  27.                 }else{
  28.                 printf("Las frases son distintas.\n");
  29.             }
  30.             break;
  31.             case 2:
  32.                 printf("Ingrese su frase a contar: ");
  33.                 fgets (f1, 20, stdin);
  34.    
  35.                 longitud = strlen (f1);
  36.                 printf("La frase tiene %d caracteres\n", longitud);
  37.             break;
  38.             case 3:
  39.                 printf("Ingrese la primera frase: ");
  40.                 fgets(f1, 20, stdin);
  41.                 printf("Ingrese la segunda frase: ");
  42.                 fgets(f2, 20, stdin);
  43.                
  44.                 strcat (f1, f2);
  45.                 printf ("Su frase es: %s", f1);
  46.                 break;
  47.             case4:
  48.                 printf ("Ingrese la primera frase: ");
  49.                 fgets(f1, 20, stdin);
  50.                 printf ("Ingrese la segunda frase: ");
  51.                 fgets (f2, 20, stdin);
  52.                
  53.                 strcpy (f1, f2);
  54.                 printf ("La frase '%s' se a copiado en '%s'.", f1, f2);
  55.                 break;
  56.             }
  57.     }while (seleccion !=5);
  58.     system ("pause");
  59. }
  #2 (permalink)  
Antiguo 18/07/2010, 21:49
 
Fecha de Ingreso: julio-2010
Mensajes: 153
Antigüedad: 13 años, 9 meses
Puntos: 1
Respuesta: Ayuda no se que pasa

..........
  #3 (permalink)  
Antiguo 18/07/2010, 22:09
 
Fecha de Ingreso: julio-2010
Mensajes: 3
Antigüedad: 13 años, 9 meses
Puntos: 0
Respuesta: Ayuda no se que pasa

Me explico.

idealmente en cada "sub algoritmo" me deberia pedir dos datos (llamese 2 frases) hacer el asunto y dar un resultado...

El problema radica en que hago que corra el algoritmo y al momento de seleccionar algo (ya sea cualquiera de las 4 funciones, no me toma el primer ingreso de datos y se salta al segundo, dandome una respuesta como si la primera frase seria nula y la segunda seria la correcta...

Mas explicado no puedo xd
  #4 (permalink)  
Antiguo 18/07/2010, 23:03
 
Fecha de Ingreso: julio-2010
Mensajes: 11
Antigüedad: 13 años, 9 meses
Puntos: 0
Respuesta: Ayuda no se que pasa

Prueba usando el do while de está forma:

Código C++:
Ver original
  1. do{
  2. printf ("1. Verificar si dos frases son iguales\n");
  3.         printf ("2. Calcular cuantas letras posee una oracion\n");
  4.         printf ("3. Juntar dos frases\n");
  5.         printf ("4. Copiar una frase en otra variable\n");
  6.         printf ("5. Salir\n");
  7.        
  8.         printf ("Ingrese su opcion: ");
  9.         scanf ("%d", &seleccion);
  10.  
  11. while(seleccion!='5');
  #5 (permalink)  
Antiguo 18/07/2010, 23:57
Avatar de HackmanC  
Fecha de Ingreso: enero-2008
Ubicación: Guatemala
Mensajes: 1.817
Antigüedad: 16 años, 3 meses
Puntos: 260
Sonrisa Respuesta: Ayuda no se que pasa

Hola,

Cita:
Iniciado por Er_Nuke Ver Mensaje
... no me toma el primer ingreso de datos y se salta al segundo, ...
El archivo stdin es un buffer de caracteres, donde se almacena todo lo que se recibe por el teclado, pero las instrucciones deben leer de ese buffer consecutivamente, incluyendo el retorno de carro (13) o nueva línea (10).

Código:
scanf ("%d", &seleccion);
Al procesar la instrucción scanf solamente estas sacando de dicho buffer el número, pero el retorno de carro o la nueva línea todavía está en el buffer. Por lo tanto tienes que quitar ese retorno de carro antes que llegue al primer fgets, de otra forma este último recibe el retorno de carro (enter, intro) inmediatamente, como que lo hubieras presionado en el teclado.

Podrías eliminarlo leyendo desde el scanf
Código:
        char c;
        scanf ("%d%c", &seleccion, &c);
        printf ("%d\n", c); // 13 en Win - 10 en Unix
O podrías eliminarlo después
Código:
        scanf ("%d", &seleccion);
        getchar();
Saludos,

Etiquetas: Ninguno
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 04:39.