Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: NathanD en 5 Marzo 2013, 19:56 pm



Título: Guardar cada línea de un fichero en una estructura
Publicado por: NathanD en 5 Marzo 2013, 19:56 pm
Hola, quiero hacer lo siguiente, pero no lo consigo.

En cada linea del fichero se supone hay un nombre, y cada uno de esos nombres quiero guardarlos en una estructura. Estaría definida así:

Código:
typedef struct{
nombre[20];
}ESTRUCTURA

Y en el main así:

Código:
ESTRUCTURA estruc[20]

Entonces, lo que yo quiero es guardar la primera línea del fichero en la primera posición, la segunda en la segunda, etc.

Para hacerlo, hago lo siguiente:
Código:
while( ! feof(fichero) )
    {
           fseek(fichero, pos_seek, SEEK_SET);
           fgets(estructura[i].nombre, 80, fichero);
           pos_seek += strlen(estructura[i].nombre);
           i++;
    }

Pero no funciona como debería.

Gracias de antemano.


Título: Re: Guardar cada línea de un fichero en una estructura
Publicado por: leosansan en 5 Marzo 2013, 20:37 pm
Creo que te bastaría, habiendo inicializado previamente i a cero, con:

Código
  1. while( ! feof(fichero) )
  2.    {
  3.           fgets(estructura[i].nombre, 20, fichero);
  4.           i++;
  5.    }


O incluso creo que así también furula "más mejor!:

Código
  1. while( fgets(estructura[i].nombre, 20, fichero)!= NULL;
  2.           i++;
  3.  
  4.  


Y si los quieres "ver":

Código
  1. for (j=0;j<i;j++)
  2.        puts(estructura[j].nombre);
  3.  


Saluditos!. ....(http://st.forocoches.com/foro/images/smilies/aaaaa.gif)


Título: Re: Guardar cada línea de un fichero en una estructura
Publicado por: naderST en 5 Marzo 2013, 20:39 pm
nombre tiene un máximo de 20 caracteres, no se por qué utilizas 80. Qué problema te da?


Título: Re: Guardar cada línea de un fichero en una estructura
Publicado por: leosansan en 5 Marzo 2013, 20:59 pm
nombre tiene un máximo de 20 caracteres, no se por qué utilizas 80. Qué problema te da?

Corregido en la reedición. Me llevo al huerto "su" código. Da gusto ver que hay quien está hasta en los detalles como ese. :rolleyes:

Saluditos!. ...
(http://st.forocoches.com/foro/images/smilies/dancer2.gif)


Título: Re: Guardar cada línea de un fichero en una estructura
Publicado por: rir3760 en 6 Marzo 2013, 01:53 am
Creo que te bastaría, habiendo inicializado previamente i a cero, con:
Código
  1. while( ! feof(fichero) )
  2.    {
  3.           fgets(estructura[i].nombre, 20, fichero);
  4.           i++;
  5.    }
No se recomienda esa forma ya que se leería una linea de mas debido al uso de la función feof.

La segunda donde se utiliza el valor de retorno de fgets:
O incluso creo que así también furula "más mejor!:
Código
  1. while( fgets(estructura[i].nombre, 20, fichero)!= NULL;
  2.           i++;
  3.  
Es la correcta. Para seguirte pegando (por supuesto en buen plan): tienes un punto y coma cuando debería ser el paréntesis de cierre.

Un saludo


Título: Re: Guardar cada línea de un fichero en una estructura
Publicado por: leosansan en 6 Marzo 2013, 10:14 am
...............................................................
La segunda donde se utiliza el valor de retorno de fgets:Es la correcta. Para seguirte pegando (por supuesto en buen plan): tienes un punto y coma cuando debería ser el paréntesis de cierre.


Pues se cierra:


Código
  1. while( fgets(estructura[i].nombre, 20, fichero)!= NULL)
  2.           i++;

Saluditos!. ...(http://st.forocoches.com/foro/images/smilies/ciao.gif)