Guardar cada línea de un fichero en una estructura

Iniciado por NathanD, 5 Marzo 2013, 19:56 PM

0 Miembros y 1 Visitante están viendo este tema.

NathanD

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í:

typedef struct{
nombre[20];
}ESTRUCTURA


Y en el main así:

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:
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.

leosansan

#1
Creo que te bastaría, habiendo inicializado previamente i a cero, con:

Código (cpp) [Seleccionar]
while( ! feof(fichero) )
   {
          fgets(estructura[i].nombre, 20, fichero);
          i++;
   }



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

Código (cpp) [Seleccionar]

while( fgets(estructura[i].nombre, 20, fichero)!= NULL;
          i++;
   



Y si los quieres "ver":

Código (cpp) [Seleccionar]

for (j=0;j<i;j++)
        puts(estructura[j].nombre);



Saluditos!. ....

naderST

nombre tiene un máximo de 20 caracteres, no se por qué utilizas 80. Qué problema te da?

leosansan

Cita de: 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?

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!. ...

rir3760

Cita de: leosansan en  5 Marzo 2013, 20:37 PM
Creo que te bastaría, habiendo inicializado previamente i a cero, con:
Código (cpp) [Seleccionar]
while( ! feof(fichero) )
    {
           fgets(estructura[i].nombre, 20, fichero);
           i++;
    }
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:
Cita de: leosansan en  5 Marzo 2013, 20:37 PM
O incluso creo que así también furula "más mejor!:
Código (cpp) [Seleccionar]
while( fgets(estructura[i].nombre, 20, fichero)!= NULL;
           i++;
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
C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language

leosansan

Cita de: rir3760 en  6 Marzo 2013, 01:53 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 (cpp) [Seleccionar]
while( fgets(estructura[i].nombre, 20, fichero)!= NULL)
           i++;


Saluditos!. ...