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

Ayuda!!! [C]

Estas en el tema de Ayuda!!! [C] en el foro de C/C++ en Foros del Web. Uso Dev-C++ y quiero hacer un programa, solo para experimentar, ya que soy principiante, que me pida un numero de personas, y luego me pida ...
  #1 (permalink)  
Antiguo 31/10/2010, 15:29
 
Fecha de Ingreso: junio-2010
Mensajes: 8
Antigüedad: 13 años, 10 meses
Puntos: 0
Pregunta Ayuda!!! [C]

Uso Dev-C++ y quiero hacer un programa, solo para experimentar, ya que soy principiante, que me pida un numero de personas, y luego me pida sus nombres y apellidos y los muestre en la pantalla.
El problema es que no me deja escribir el nombre de la persona Nº 1, empieza pidiendome su apellido!! (El resto del programa anda OK)

Acá está el código:
Código C:
Ver original
  1. #include<stdio.h>
  2.  
  3. int main()
  4. {
  5. int i;
  6. int cant=0;\*La cantidad de personas *\
  7.  
  8. scanf("%i",&cant);\*Pedir la cantidad de personas*\
  9.  
  10. struct personas
  11. {char nombre[20];
  12. char apellido[20];};
  13.  
  14. struct personas PERSONA[cant];
  15.  
  16. system("cls");
  17.  
  18. \*Acá pido los datos de cada persona. ACÁ ESTÁ EL PROBLEMA: NO PUEDO ESCRIBIR EL NOMBRE 1*\
  19. for(i=0;i<cant;i++)
  20. {printf("PERSONA N %i: \n\n",i+1);
  21. printf("Nombre %i: ",i+1);fflush( stdout );
  22. gets(PERSONA[i].nombre);
  23. printf("\nApellido %i: ",i+1);fflush( stdout );
  24. gets(PERSONA[i].apellido);
  25. printf("\n\n");
  26.  
  27. }
  28. system("cls");
  29.  
  30. \*Muestra los datos ingresados anteriormente*\
  31. for(i=0;i<cant;i++)
  32. {printf("\nNombre %i: %s",i+1,PERSONA[i].nombre);
  33. printf("\nApellido %i: %s\n",i+1,PERSONA[i].apellido);
  34. }
  35.  
  36. system("pause");
  37.  
  38. }

¿Hice algo mal? No puedo solucionarlo.

Otra cosa: ¿Qué es eso de fflush(stdout) ? lo copié de internet pero no se para qué es.


GRACIAS!!!
  #2 (permalink)  
Antiguo 31/10/2010, 20:07
Avatar de gvite666  
Fecha de Ingreso: abril-2010
Mensajes: 65
Antigüedad: 14 años
Puntos: 4
Respuesta: Ayuda!!! [C]

hola revisando un poco tu codigo encontre algunos errores, lo que pasa es que estas manejando mal tu fflush en vez de vaciar el buffer de entrada vacias el de salida y te falto un fflush antes de pedir el nombre.
aqui te explican mejor de lo que te hablo:

http://www.carlospes.com/curso_de_le...ion_fflush.php

otra cosa, tu compilador no deveria haceptar esta linea:

struct personas PERSONA[cant];

ya que no puedes decrarar un arreglo asi, lo que pasa es que el precompilado debe saber la longitud de este, con esto tu codigo queda inservible para probarlo con otros compiladores, asi que modificalo., cheka este post:

http://www.forosdelweb.com/f96/probl...-array-855508/
Saludos.
__________________
No pienses si no vas a actuar.
  #3 (permalink)  
Antiguo 01/11/2010, 04:51
Avatar de Munire  
Fecha de Ingreso: julio-2010
Ubicación: en el ciberdespacio (España)
Mensajes: 150
Antigüedad: 13 años, 9 meses
Puntos: 4
Respuesta: Ayuda!!! [C]

el problema es que hay que poner stdin (en vez de stdout). leete el enlace de gvite666, viene muy bien explicado.

Código C:
Ver original
  1. #include <stdio.h>
  2.  
  3. typedef struct personas
  4. {
  5.     char nombre[20];
  6.     char apellido[20];
  7. }tipostructpersona;
  8.  
  9.  
  10.  
  11. int main()
  12. {
  13.     int i=0;
  14.     int cant=0;  //La cantidad de personas
  15.     tipostructpersona persona[20];   //maximo de personas (por ejemplo 20)
  16.  
  17.     printf("cantidad de personas: ");
  18.     scanf("%i",&cant);  //Pedir la cantidad de personas  MAXIMO 20
  19.      
  20.  
  21.     for(i=0;i<cant;i++)
  22.     {
  23.         printf("\nPERSONA N %i: \n\n",i+1);
  24.         printf("Nombre %i: ",i+1);
  25.         fflush(stdin);
  26.         gets(persona[i].nombre);
  27.         printf("\nApellido %i: ",i+1);
  28.         fflush( stdin );
  29.         gets(persona[i].apellido);
  30.         printf("\n\n");
  31.     }
  32.  
  33.    
  34.      
  35.     //Muestra los datos ingresados anteriormente
  36.     for(i=0;i<cant;i++)
  37.     {
  38.         printf("\nNombre %i: %s",i+1,persona[i].nombre);
  39.         printf("\nApellido %i: %s\n",i+1,persona[i].apellido);
  40.     }
  41.      
  42.     system("pause");
  43.     return 0;
  44.  
  45. }

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 05:35.