feof, por si solo, es ineficiente para comprobar el final de un archivo. O bien repetís una lectura al final o alguna te va a faltar. Lo explique en varios hilos, pero basicamente feof no te devuelve el dato correcto cuando alcanzas el final de un archivo, lo hace cuando ya lo pasaste. Usa el buscador que en otros hilos lo he explicado en detalle.
Lo ideal es usar feof sumado al valor de retorno de la función de lectura que estés utilizando, igualmente si lo primero que tenes que hacer en un ciclo es la lectura, te podes ahorrar feof completamente.
Igualmente, el tipo de lectura que estas utilizando, es propensa a errores y obsoleta. Realmente te recomendaría que leas en un buffer y luego parsees el contenido.
Te pongo un ejemplo básico:
while (fgets(buffer
,sizeof buffer
,archivo
) != NULL
) {
while (charptr != NULL)
{
strncpy(usuario
[i
].
nombre, buffer
, sizeof usuario
[i
].
nombre); strncpy(usuario
[i
].
apellido, charptr
, sizeof usuario
[i
].
apellido); }
printf("Nombre: %s \nApellido: %s\n\n",usuario
[i
].
nombre,usuario
[i
].
apellido); i++;
}
Por supuesto lo ideal seria que antes
valides el contenido, luego hagas el parseo, y obviamente que cada tarea la dividas en funciones, pero eso ya queda que lo hagas vos.
El código lo codifique directo en el post y no lo he probado, así que ante cualquier error, avísame por acá u por pm.
Referencias:Saludos