Código
typedef struct { char fecha[11]; float notaParcial; }Parcial; typedef struct { char nomAsignatura[60]; int codAsignatura; float notaAsignatura; int numParciales; Parcial *parciales; }Asig; typedef struct { char nombre[100]; char expediente[20]; int numAsig; Asig *asignaturas; }Alumnos;
Estos datos se guardan en un árbol binario para posteriormente guardarlos en un Fichero binario. Hago lo siguiente:
Código
void procesar(void *datos) { Alumnos * A = (Alumnos*)datos; int i, j; FILE* pf; FILE *pf_lectura; Alumnos *B = NULL; int resultado = 0; if (pf != NULL) { //Guardatos datos estaticos del alumno fwrite(A->nombre, sizeof(A->nombre),1, pf); //fwrite(que voy a grabar, tamaño del tipo de dato, tamaño de datos vas a grabar?,archivo) //ahora grabamos datos de asignaturas y parciales for (i = 0; i < A->numAsig; i++) { //ahora grabamos los datos de los parciales for (j = 0; j < A->asignaturas[i].numParciales; j++) { fwrite(&A->asignaturas[i].parciales[j].notaParcial, sizeof(A->asignaturas[i].parciales[j].notaParcial), 1, pf); } } } for (i = 0; i < A->numAsig; i++) { for (j = 0; j < A->asignaturas[i].numParciales; j++) { } } //Leer fichero //Reservo memoria para leer datos //Asignamos memoria para un objeto de tipo alumnos. //Reservo memoria para Asignaturas for (i = 0; i < A->numAsig; i++) { //Reservo memoria para parciales } if (!pf) for (i = 0; i < B->numAsig; i++) { resultado += fread(B->asignaturas[i].nomAsignatura, sizeof(B->asignaturas[i].nomAsignatura), 1, pf_lectura); resultado += fread(&B->asignaturas[i].codAsignatura, sizeof(B->asignaturas[i].codAsignatura), 1, pf_lectura); resultado += fread(&B->asignaturas[i].notaAsignatura, sizeof(B->asignaturas[i].notaAsignatura), 1, pf_lectura); resultado += fread(&B->asignaturas[i].numParciales, sizeof(B->asignaturas[i].numParciales), 1, pf_lectura); for (j = 0; j < B->asignaturas[i].numParciales; j++) { resultado += fread(B->asignaturas[i].parciales[j].fecha, sizeof(B->asignaturas[i].parciales[j].fecha), 1, pf_lectura); resultado += fread(&B->asignaturas[i].parciales[j].notaParcial, sizeof(B->asignaturas[i].parciales[j].notaParcial), 1, pf_lectura); } } }
Con este código, si guardo una sola persona con todos sus datos, puedo leer el fichero son problemas. Pero cuando guardo más de uno... por ejemplo 2. Me imprime solo uno.
Lo muestro para que vean:
Introducir datos. Finlizar con eof.
--------------
Nombre de Alumno: ruben
Expediente: ruben
Numero de asignaturas: 1
Nombre de asignatura: ruben
Codigo de asignatura: 1
Numero de parciales realizados: 1
Fecha de parcial 1: 1
Nota de parcial 1: 1
Desea seguir agregando alumnos? (1-si/0-no)
1
--------------
Nombre de Alumno: juan
Expediente: juan
Numero de asignaturas: 1
Nombre de asignatura: juan
Codigo de asignatura: 1
Numero de parciales realizados: 1
Fecha de parcial 1: 1
Nota de parcial 1: 1
Desea seguir agregando alumnos? (1-si/0-no)
0
Arbol:
>>> Imprimo Arbol>>>>
Nombre: juan
Expediente: juan
Numero de asignaturas: 1
Nombre de asignatura: juan
Codigo de asignatura: 1
Nota de asignatura: 1
Numero de parciales: 1
Fecha: 1
Nota de parcial: 1
>>>> Imprimiendo datos desde el fichero binario.
Nombre: juan
Expediente: juan
Numero de asignaturas: 1
Nombre de asignatura: juan
Codigo de asignatura: 1
Nota de asignatura: 1
Numero de parciales: 1
Fecha: 1
Nota de parcial: 1
Se han leido: 9 bytes
>>> Imprimo Arbol>>>>
Nombre: ruben
Expediente: ruben
Numero de asignaturas: 1
Nombre de asignatura: ruben
Codigo de asignatura: 1
Nota de asignatura: 1
Numero de parciales: 1
Fecha: 1
Nota de parcial: 1
>>>> Imprimiendo datos desde el fichero binario.
Nombre: juan
Expediente: juan
Numero de asignaturas: 1
Nombre de asignatura: juan
Codigo de asignatura: 1
Nota de asignatura: 1
Numero de parciales: 1
Fecha: 1
Nota de parcial: 1
Se han leido: 9 bytes
Presione una tecla para continuar . . .
¿Por qué solo me imprime a "juan" y no a "ruben" y cuál sería la manera correcta de poder imprimir mi fichero?
La manera en que se escribe el fichero es definida por el profesor, y me pide que lea el fichero.
Muchas gracias por la ayuda que puedan brindarme.