Una cosa, que formato tiene el lista.dat? Es decir, como guardas los datos que quieres leer despues? Independientemente de como lo tengas haz el ciclo sin basarte en el feof sino en el estado de la funcion, eso sirve para saber que has llegado al final del archivo y como control de errores. Esto se implementa con el valor de retorno de fscanf:
Si no hay error: retorna el nº de entidades leidas; en tu caso las entidades son %s, es decir que hay una ejecucion positiva siempre que fscanf retorna 1
Si hay error:retorna un numero menor al de las entidades indicadas (p.ejemplo si indicas "%d %f" y retorna 1 cuando deberia retornar 2, o si retorna 0, o si retorna -1). Si la causa es que no hubo posibilidad de encontrar formatos compatibles simplemente retorna el nº de entidades encontradas segun el formato; si se llego al final del archivo marcará feof, y si hubo cuanquier otro error marcará ferror.
Puesto en codigo sería algo asi:
Código C:
Ver originalwhile(1) {
if(fscanf(archivo
, "%s", temp
) == 1) { //lectura correcta
}
else {
//control de errores
//final del archivo
//no es un error pero se trata como tal
}
printf("Se produjo un error de acceso"); }
else {
printf("Se produjo un error inesperado"); }
//salgo del bucle
break;
}
}
Solo una cosa a tener en cuenta: el while(1) es un bucle infinito, tienes que tenerlo controlado en todo momento.
Cuando entras al 'else' de control de errores siempre tienes que finalizar el bucle infinito, de lo contrario no puedes asegurar que seguiras controlandolo.
Tal como ves, es una buena practica hacer todas las comprovaciones de error.
Otra cosa: ya que en tu otro post trabajabas con estructuras, porque no guardas las estructuras directamente al archivo para despues leerlas en una sola vez? Una vez has leido la estructura muestras cada campo por pantalla tal como quieras.
Saludos
vosk