Código
void leer_persona (tlista *p) { talumno alumno; p->num_pers = 0; int i, j = 0, n; printf ("\nIntroduce la cantidad de alumnos que quieres guardar. Recuerda que el maximo es 200 alumnos: "); if (n < MAXALUMNO) {// Se ha de cumplir que el número de alumnos a introducir sea menor o igual a 200 for (i = 0; i < n; i++) { printf("Introduce informacion con el siguiente formato(Nombre_apellidos:DNI 00000000X:anyo_ingreso):\n"); //ENCONTRAR OTRA MANERA DE LEER EL NOMBRE do{ j++; }while (alumno.nombre[j-1] != ':' && j-1 < 20); p->lista[i] = alumno; } p->num_pers = n; } }
La variable tlista p está inicializada en el main (), el programa es un menú con diferentes opciones, y en cada case va una función. Un ejemplo de ejecución para que veáis que es lo que puede fallar:
Código:
BIENVENIDOS AL PROGRAMA DE GESTIÓN DE EXPEDIENTES
Escoge una operación a realizar:
1. Introducir los datos de los expedientes.
2. Mostrar todos los datos de los expedientes.
4. Añadir o modificar el expediente de un alumno.
5. Eliminar el expediente de un alumno a partir de su DNI.
6. Mostrar los datos (Nombre, DNI y fecha de ingreso) de los alumnos que más tiempo llevan en la escuela.
7. Mostrar el expediente de un alumno a partir de su DNI.
13. Salir del programa.
Su opción es:1
Introduce la cantidad de alumnos que quieres guardar. Recuerda que el maximo es 200 alumnos: 2
Informacion del ALUMNO1
Introduce informacion con el siguiente formato(Nombre_apellidos:DNI 00000000X:anyo_ingreso):
alejandro:39427559Q:1992
Informacion del ALUMNO2
Introduce informacion con el siguiente formato(Nombre_apellidos:DNI 00000000X:anyo_ingreso):
fernando:11111111Q:1993
Escoge una operación a realizar:
1. Introducir los datos de los expedientes.
2. Mostrar todos los datos de los expedientes.
4. Añadir o modificar el expediente de un alumno.
5. Eliminar el expediente de un alumno a partir de su DNI.
6. Mostrar los datos (Nombre, DNI y fecha de ingreso) de los alumnos que más tiempo llevan en la escuela.
7. Mostrar el expediente de un alumno a partir de su DNI.
13. Salir del programa.
Su opción es:2
alejandro:39427559Q:1992
:11111111Q:1993
Como vereis, cuando uso la función mostrar_datos, que muestra todos los expedientes guardados en la lista, el nombre del segundo no me lo muestra, creo que es porque ya directamente no entra en el while porque se cumple la condición de != ':' . Así que deduzco que el error viene por la función leer_alumnos y en concreto en la parte en la que leo el nombre del alumno y lo introduzco al vector.
Por si es necesario, la función mostrar datos es la siguiente:
Código
talumno mostrar_datos(tlista *p){ int i, k=0; for ( i = 0; i < p->num_pers ; i++) { while (p->lista[i].nombre[k] != ':'){ k++; } printf(":%d%c:%d\n", p->lista[i].num_dni, p->lista[i].letra_dni, p->lista[i].fecha_ingreso); //Mostrar DNI y fecha de ingreso } // Cerramos el for } //Cerramos la función
Siento si no me he sabido explicar del todo bien, la asignatura no se me da mal, este es el primer proyecto importante que tengo y me gustaría que me saliera bien, si pudierais ayudarme con esta pequeña duda sería muy importante, porque me permitiría avanzar.