Título: Problema al leer registros en ficheros
Publicado por: neveldine en 25 Noviembre 2015, 13:35 pm
Hola, Tengo un problema con este programa. Como podéis ver cuando muestro los registros del fichero los duplica. #include <stdio.h> #include <stdlib.h> #include <string.h> #include "MemoryManager.h" #define N 80 #define SALIR 4 typedef struct { char nombre[N]; char direccion[N]; int telefono; } t_persona; int menu(void); void crearFichero(FILE **pf); void introducirRegistros(FILE *pf); void visualizarFichero(FILE *pf); /** * Punto de entrada y salida al programa principal */ int main() { int op = 0; FILE *pf = NULL; do { op = menu(); switch (op) { case 1: // crear fichero crearFichero(&pf); break; case 2: // introducir registros introducirRegistros(pf); break; case 3: // visualizar registros visualizarFichero(pf); break; case 4: // salir break; } } while (op != SALIR); MemoryManager_DumpMemoryLeaks(); return 0; } { const int dsp = 'a' - 'A'; if (c >= 'A' && c <= 'Z') return c + dsp; return c; } int menu(void) { int op = 0; char linea[N] = { 0 }; do { printf("2. Introducir registros\n"); printf("3. visualizar registros\n"); } while (op < 1 || op > 4); return op; } void crearFichero(FILE **pf) { char nomFichero[N] = { 0 }; char resp = 0; char linea[N] = { 0 }; printf("Nombre del fichero: "); fgets(nomFichero , N , stdin ); nomFichero [strlen(nomFichero ) - 1] = 0; if (*pf != NULL) { // existe, preguntar si se sobreesribe do { printf("Desea sobreescribir el fichero"); return; } *pf = fopen(nomFichero , "w+b"); } void introducirRegistros(FILE *pf) { char resp = 0; char linea[N] = { 0 }; t_persona *p_per = malloc(sizeof(t_persona )); memset(p_per , 0, sizeof(t_persona )); if (p_per == NULL) { printf("memoria insuficiente"); } do { fgets(p_per ->nombre , N , stdin ); p_per ->nombre [strlen(p_per ->nombre ) - 1] = 0; fgets(p_per ->direccion , N , stdin ); p_per ->direccion [strlen(p_per ->direccion ) - 1] = 0; sscanf(linea , "%d", &p_per ->telefono ); fwrite(p_per , sizeof(t_persona ), 1, pf ); do { printf("\nDesea introducir otro registro: "); } void visualizarFichero(FILE *pf) { char linea[N] = { 0 }; int pos = 0; t_persona *p_per = malloc(sizeof(t_persona )); if (p_per == NULL) { printf("memoria insuficiente"); } fread(p_per , sizeof(t_persona ), 1, pf ); printf("%s\n", p_per ->nombre ); printf("%s\n", p_per ->direccion ); printf("%d\n", p_per ->telefono ); } }
1. Crear fichero 2. Introducir registros 3. visualizar registros 4. salir opcion: 1 Nombre del fichero: red.datos
1. Crear fichero 2. Introducir registros 3. visualizar registros 4. salir opcion: 2
------ Nombre: Marina Direccion: vereda Telefono: 234 Desea introducir otro registro: n
1. Crear fichero 2. Introducir registros 3. visualizar registros 4. salir opcion: 3
Marina vereda 234 Marina vereda 234
Gracias anticipadas. Un cordial saludo
Título: Re: Problema al leer registros en ficheros
Publicado por: neveldine en 25 Noviembre 2015, 14:09 pm
Ya está solucionado, el problema era que al visualizar los registros el bucle tiene que ser: fread(p_per , sizeof(t_persona ), 1, pf ); printf("%s\n", p_per ->nombre ); printf("%s\n", p_per ->direccion ); printf("%d\n", p_per ->telefono ); fread(p_per , sizeof(t_persona ), 1, pf ); }
|