Hola, hace poco pedí ayuda con el mismo programa, pero el problema era otro, espero que esto no sea alguna clase de spam o doble post. Es mas que todo una duda, ya que he hecho que el programa corra bien.
Acá el codigo:
Código C:
Ver original#include <stdio.h>
#include <string.h>
struct fecha {
int dia;
int mes;
int anio;
};
struct sexo {
int op;
char masculino[15];
char femenino[15];
char sexoa[20];
};
struct especialidad {
int opc;
char inf[20];
char adm[20];
char agr[20];
char esp[20];
};
struct alumno {
long cedula;
char nombre[40];
char apellido[40];
char direccion[100];
long telefono;
struct fecha fecha_nac;
struct sexo sex;
struct especialidad espe;
int prom;
char ciudadn[50];
char estadon[50];
};
struct alumno alumnos[100];
int main() {
int i,n;
printf("Introduzca el numero de alumnos a almacenar:"); for (i=0; i<n; i++) {
printf("\nDatos del alumno #%d\n", i
+1); scanf("%ld",&alumnos
[i
].
cedula); gets(alumnos
[i
].
apellido); gets(alumnos
[i
].
direccion); scanf("%ld",&alumnos
[i
].
telefono); printf("1.)Masculino\n2.)Femenino\n"); scanf("%d",&alumnos
[i
].
sex.
op); switch (alumnos[i].sex.op)
{
case 1:
{
strcpy(alumnos
[i
].
sex.
sexoa,"Masculino"); break;
}
case 2:
{
strcpy(alumnos
[i
].
sex.
sexoa,"Femenino"); break;
}
}
printf("Fecha de nacimiento:\n"); scanf("%d",&alumnos
[i
].
fecha_nac.
dia); scanf("%d",&alumnos
[i
].
fecha_nac.
mes); scanf("%d",&alumnos
[i
].
fecha_nac.
anio); printf("1.)Informatica\n2.)Administracion\n3.)Agroalimentaria\n"); scanf("%d",&alumnos
[i
].
espe.
opc); switch (alumnos[i].espe.opc)
{
case 1:
{
strcpy(alumnos
[i
].
espe.
esp,"Informatica"); break;
}
case 2:
{
strcpy(alumnos
[i
].
espe.
esp,"Administracion"); break;
}
case 3:
{
strcpy(alumnos
[i
].
espe.
esp,"Agro"); break;
}
}
scanf("%d",&alumnos
[i
].
prom); printf("Ciudad de nacimiento: "); gets(alumnos
[i
].
ciudadn); printf("Estado de nacimiento: \n"); gets(alumnos
[i
].
estadon); }
printf("\n\n\t******Datos Almacenados******\n\n");
for (i=0; i<n; i++) {
printf("Cedula: %ld\nNombre: %s\nApellido: %s\n",alumnos
[i
].
cedula,alumnos
[i
].
nombre,alumnos
[i
].
apellido); printf("Direccion: %s\nTelefono: %ld\n",alumnos
[i
].
direccion,alumnos
[i
].
telefono); printf("Sexo: %s\n",alumnos
[i
].
sex.
sexoa); printf("Fecha de nacimiento: %d/%d/%d\n",alumnos
[i
].
fecha_nac.
dia,alumnos
[i
].
fecha_nac.
mes,alumnos
[i
].
fecha_nac.
anio); printf("Especialidad: %s\nPromedio: %d\n",alumnos
[i
].
espe.
esp,alumnos
[i
].
prom); printf("Ciudad de nacimiento: %s\nEstado de nacimiento: %s\n\n",alumnos
[i
].
ciudadn,alumnos
[i
].
estadon); }
}
Ok, con este codigo se me presenta un problema. Luego de leer la cedula, como que se salta el paso de lectura del nombre, osea no se detiene en nombre para que ingrese el texto, salta de una vez a apellido y este si lo lee, luego direccion tambien lo lee. Entonces cuando llega a Ciudad de nacimiento pasa lo mismo que con nombre, salta hacía estado de nacimiento el cual si lee.
Acá una imagen
Mis duas son: Por que se salta nombre pero no se salta ni apellido ni direccion? Entonces por que luego se salta Ciudad de nacimiento y luego no salta Estado de nacimiento?
Se me ha ocurrido algo y agrege otro gets a nombre y ciudad y me quedo así
Y mas abajo...
Y funciona correctamente
A que se debe que funcione así? Por que debo agregar un segundo gets?
Esto no pasa en otros códigos que tengo con el gets, cabe mencionar que no uso ni estructuras ni ciclos.