Autor
|
Tema: problema con archivo (Leído 2,928 veces)
|
javahat
Desconectado
Mensajes: 37
|
Hola necesito trabajar con archivos pero tengo un problema al cargar los datos del archivo a un arreglo como lo puedo hacer? aquí dejo mi avance. ; int edad; }; void ingresardatos(struct registro personas[]){ int i=0; for(i=0;i<3;i++){ printf("Nombre:"); scanf("%s", &personas[i].nombre); printf("Edad:"); scanf("%d", &personas[i].edad); } } void guardarfichero(struct registro personas[]){ int i; FILE *archivo; archivo=fopen("fichero.txt","w"); for(i=0;i<3;i++){ fprintf(archivo, "%s\n" ,personas[i].nombre); fprintf(archivo, "%d\n" ,personas[i].edad); } fclose(archivo); } void cargarfichero(struct registro personas[]){ FILE *archivo; int i; archivo=fopen("fichero.txt","a"); if(archivo==NULL){ printf("No se ha podido abrir el archivo"); } i=0; while(!feof(archivo)){ fscanf(archivo, "%d", &personas[i].edad); printf("%s",personas[i].nombre); printf("%d",personas[i].edad); i++; } fclose(archivo); } main(){ struct registro personas[3]; ingresardatos(personas); guardarfichero(personas); cargarfichero(personas); }
|
|
|
En línea
|
|
|
|
leogtz
. . .. ... ..... ........ ............. .....................
Colaborador
Desconectado
Mensajes: 3.069
/^$/
|
Suponiendo que el contenido del archivo es algo así: Michael Jackson 0 Lola Beltran 12 Leo Gutierrez R. 19
Prueba esto: #include <stdio.h> #include <stdlib.h> #include <string.h> struct fecha { char nombre[100]; unsigned int edad; } personas[3]; void cargarArchivo(struct fecha personas[]) { FILE *archivo = fopen("file.txt", "r"); unsigned int i = 0; if(archivo == NULL) { fprintf(stderr , "Error abriendo el archivo."); } char linea[100]; { fgets(linea , 100, archivo ); strcpy(personas [i ]. nombre, linea ); fgets(linea , 100, archivo ); personas [i ]. edad = atoi(linea ); i++; } } int main(void) { cargarArchivo(personas); unsigned int i; for(i = 0; i < 3; i++) printf("Nombre : %sEdad : %u\n", personas [i ]. nombre, personas [i ]. edad); return EXIT_SUCCESS; }
|
|
« Última modificación: 30 Abril 2010, 00:39 am por Leo Gutiérrez. »
|
En línea
|
|
|
|
Littlehorse
All the world's a stage
Moderador
Desconectado
Mensajes: 2.714
Nie Dam Sie
|
No deberías usar feof de esa forma. Es posible que si el archivo esta mal formateado en la segunda lectura alcances el final del archivo sin saberlo, por lo tanto quedaría contenido basura en la estructura. while (fgets(linea , 100, archivo )) { //hago lo que sea con el buffer if(fgets(linea , 100, archivo )) //hago de nuevo lo que sea con el buffer }
O cualquier variación que se te ocurra entre eso y feof para no alcanzar el final del archivo sin que el programa se de cuenta. Saludos!
|
|
|
En línea
|
An expert is a man who has made all the mistakes which can be made, in a very narrow field.
|
|
|
leogtz
. . .. ... ..... ........ ............. .....................
Colaborador
Desconectado
Mensajes: 3.069
/^$/
|
Gracias por el comentario. Sólo habría que cambiar por esto: while(fgets(linea , 100, archivo )) { strcpy(personas [i ]. nombre, linea ); if(fgets(linea , 100, archivo )) personas [i ]. edad = atoi(linea ); i++; }
|
|
|
En línea
|
|
|
|
javahat
Desconectado
Mensajes: 37
|
Gracias por los distintos consejos, he logrado abrir leer el archivo y pasarlo a una matriz pero cuando realizo el fscanf me toma en la ultima linea del archivo un registro basura con caracteres raros. #include <stdio.h> #include <stdlib.h> #include <string.h> struct registro{ char nombre[10]; char clave[10]; char repetirclave[10]; int edad; }; void ingresardatos(struct registro personas[]){ int i=0; FILE *archivo; archivo =fopen("fichero.txt","a+"); for(i=0;i<3;i++){ scanf("%s",&personas [i ]. nombre); } } void guardarfichero(struct registro personas[]){ int i; FILE *archivo; archivo =fopen("fichero.txt","a+"); for(i=0;i<3;i++){ fprintf(archivo , "%s\n" ,personas [i ]. nombre); } } void cargarfichero(struct registro personas[]){ FILE *archivo; int i; archivo =fopen("fichero.txt","r"); if(archivo==NULL){ printf("No se ha podido abrir el archivo"); } i=0; fscanf(archivo , "%s", &personas [i ]. nombre); printf("Numero %d :%s\n",i ,personas [i ]. nombre); i++; } } main(){ struct registro personas[50]; ingresardatos(personas); guardarfichero(personas); cargarfichero(personas);
|
|
|
En línea
|
|
|
|
Dellarts
Desconectado
Mensajes: 12
|
No he sabido encontrar el error pero cuando trabajes con estructuras si utilizas el fread te sera mas facil y no te dara el problema que te esta dando
|
|
|
En línea
|
|
|
|
|
|