elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Los 10 CVE más críticos (peligrosos) de 2020


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  problema con archivo
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: problema con archivo  (Leído 2,928 veces)
javahat

Desconectado Desconectado

Mensajes: 37


Ver Perfil
problema con archivo
« en: 29 Abril 2010, 22:24 pm »

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.

Código
  1. ;
  2.    int edad;
  3. };
  4.  
  5.  
  6.  
  7. void ingresardatos(struct registro personas[]){
  8.  int i=0;
  9.  
  10.  for(i=0;i<3;i++){
  11.  
  12.  printf("Nombre:");
  13.  scanf("%s", &personas[i].nombre);
  14.  printf("Edad:");
  15.  scanf("%d", &personas[i].edad);
  16.  
  17.  }
  18.  
  19.  
  20. }
  21.  
  22.  
  23. void guardarfichero(struct registro personas[]){
  24.  
  25.   int i;
  26.    FILE *archivo;
  27.  
  28.    archivo=fopen("fichero.txt","w");
  29.  
  30.    for(i=0;i<3;i++){
  31.       fprintf(archivo, "%s\n" ,personas[i].nombre);
  32.       fprintf(archivo, "%d\n" ,personas[i].edad);
  33.  
  34.      }
  35.  
  36. fclose(archivo);
  37. }
  38.  
  39. void cargarfichero(struct registro personas[]){
  40. FILE *archivo;
  41. int i;
  42. archivo=fopen("fichero.txt","a");
  43.  if(archivo==NULL){
  44.      printf("No se ha podido abrir el archivo");
  45.  }
  46.  
  47.  i=0;
  48.  while(!feof(archivo)){
  49.  
  50.  
  51.      fscanf(archivo, "%d", &personas[i].edad);
  52.  
  53.     printf("%s",personas[i].nombre);
  54.     printf("%d",personas[i].edad);
  55.  
  56.   i++;
  57.  
  58.  
  59.  }
  60.  
  61.  
  62.  fclose(archivo);
  63.  
  64. }
  65.  
  66.  
  67.  
  68.  
  69. main(){
  70.  
  71. struct registro personas[3];
  72.  
  73.  
  74.  ingresardatos(personas);
  75.  guardarfichero(personas);
  76.  cargarfichero(personas);
  77.  
  78. }


En línea

leogtz
. . .. ... ..... ........ ............. .....................
Colaborador
***
Desconectado Desconectado

Mensajes: 3.069


/^$/


Ver Perfil WWW
Re: problema con archivo
« Respuesta #1 en: 30 Abril 2010, 00:35 am »

Suponiendo que el contenido del archivo es algo así:

Código:
Michael Jackson
0
Lola Beltran
12
Leo Gutierrez R.
19

Prueba esto:
Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4. struct fecha
  5. {
  6.    char nombre[100];
  7.    unsigned int edad;
  8. } personas[3];
  9. void cargarArchivo(struct fecha personas[])
  10. {
  11.    FILE *archivo = fopen("file.txt", "r");
  12.    unsigned int i = 0;
  13.    if(archivo == NULL)
  14.    {
  15.        fprintf(stderr, "Error abriendo el archivo.");
  16.        exit(1);
  17.    }
  18.    char linea[100];
  19.    while(!feof(archivo))
  20.    {
  21.        fgets(linea, 100, archivo);
  22.        strcpy(personas[i].nombre, linea);
  23.        fgets(linea, 100, archivo);
  24.        personas[i].edad = atoi(linea);
  25.        i++;
  26.    }
  27.    fclose(archivo);
  28. }
  29. int main(void)
  30. {
  31.    cargarArchivo(personas);
  32.    unsigned int i;
  33.    for(i = 0; i < 3; i++)
  34.        printf("Nombre : %sEdad : %u\n", personas[i].nombre, personas[i].edad);
  35.    return EXIT_SUCCESS;
  36. }
  37.  


« Última modificación: 30 Abril 2010, 00:39 am por Leo Gutiérrez. » En línea

Código
  1. (( 1 / 0 )) &> /dev/null || {
  2. echo -e "stderrrrrrrrrrrrrrrrrrr";
  3. }
  4.  
http://leonardogtzr.wordpress.com/
leogutierrezramirez@gmail.com
Littlehorse
All the world's a stage
Moderador
***
Desconectado Desconectado

Mensajes: 2.714


Nie Dam Sie


Ver Perfil WWW
Re: problema con archivo
« Respuesta #2 en: 30 Abril 2010, 01:04 am »

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.

Código
  1. while (fgets(linea, 100, archivo))
  2. {
  3.   //hago lo que sea con el buffer
  4.     if(fgets(linea, 100, archivo))
  5.          //hago de nuevo lo que sea con el buffer
  6. }
  7.  

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 Desconectado

Mensajes: 3.069


/^$/


Ver Perfil WWW
Re: problema con archivo
« Respuesta #3 en: 30 Abril 2010, 01:08 am »

Gracias por el comentario.

Sólo habría que cambiar por esto:

Código
  1. while(fgets(linea, 100, archivo))
  2.    {
  3.        strcpy(personas[i].nombre, linea);
  4.        if(fgets(linea, 100, archivo))
  5.        personas[i].edad = atoi(linea);
  6.        i++;
  7.    }
En línea

Código
  1. (( 1 / 0 )) &> /dev/null || {
  2. echo -e "stderrrrrrrrrrrrrrrrrrr";
  3. }
  4.  
http://leonardogtzr.wordpress.com/
leogutierrezramirez@gmail.com
javahat

Desconectado Desconectado

Mensajes: 37


Ver Perfil
Re: problema con archivo
« Respuesta #4 en: 2 Mayo 2010, 04:47 am »

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.

Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4. struct registro{
  5.  
  6.    char nombre[10];
  7.    char clave[10];
  8.    char repetirclave[10];
  9.    int edad;
  10. };
  11.  
  12.  
  13.  
  14. void ingresardatos(struct registro personas[]){
  15.  int i=0;
  16.  
  17. FILE *archivo;
  18.  
  19. archivo=fopen("fichero.txt","a+");
  20.  
  21.  
  22.  for(i=0;i<3;i++){
  23.  
  24.  printf("Nombre:");
  25.  
  26.  scanf("%s",&personas[i].nombre);
  27.  
  28.  
  29.  }
  30. fclose(archivo);
  31. }
  32.  
  33. void guardarfichero(struct registro personas[]){
  34.  
  35.   int i;
  36.    FILE *archivo;
  37.  
  38.    archivo=fopen("fichero.txt","a+");
  39.  
  40.    for(i=0;i<3;i++){
  41.       fprintf(archivo, "%s\n" ,personas[i].nombre);
  42.  
  43.   }
  44.  
  45. fclose(archivo);
  46. }
  47.  
  48. void cargarfichero(struct registro personas[]){
  49.  
  50. FILE *archivo;
  51. int i;
  52.  
  53. archivo=fopen("fichero.txt","r");
  54.  if(archivo==NULL){
  55.      printf("No se ha podido abrir el archivo");
  56.  }
  57.  i=0;
  58.  
  59.  
  60.  while(!feof(archivo)){
  61.  
  62.  fscanf(archivo, "%s", &personas[i].nombre);
  63.  
  64.  printf("Numero %d :%s\n",i,personas[i].nombre);
  65.  i++;
  66.  
  67.  
  68.  }
  69.  
  70. fclose(archivo);
  71. }
  72.  
  73. main(){
  74.  
  75. struct registro personas[50];
  76.  
  77.  
  78. ingresardatos(personas);
  79. guardarfichero(personas);
  80.  cargarfichero(personas);
  81.  
  82.  
En línea

Dellarts

Desconectado Desconectado

Mensajes: 12


Ver Perfil
Re: problema con archivo
« Respuesta #5 en: 2 Mayo 2010, 16:08 pm »

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

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines