Una cosa, el codigo de Fw190 funciona porque sale del bucle cuando aun habiendo entrado en el ciclo se llega a la condicion de eof.
Propongo otra cosa, usa las comprovaciones de estado/error para saber que está haciendo tu ciclo: o se habrá leido correctamente, o se habrá llegado al eof, o se habrá producido un error; sabiendo esto solo tienes que aplicar las tres condiciones
Código C:
Ver original//ciclo infinito
while(1) {
//lees y guardas el nº de elementos leidos
ncr
= fscanf(archivo
, "%s", leido
);
//comprovacion de estado
if(ncr > 0) {//ok
}
else if(ncr == EOF) {//eof
break;
}
else {//error
break;
}
}
El 'ncr' es un entero. Ten en cuenta que el valor de retorno de fscanf en caso de exito depende del numero de entidades a escanear que le envias como formato, en este caso quieres escanear un %s entonces en la condicion de exito retorna 1. En el codigo he puesto que la condicion de exito sea cuando el nº de entidades sea >0, pero puedes encontrarte casos con una lectura correcta y que el nº de entidades leidas sea 0 (p.ej. si quieres escanear un entero y en el texto solo hay letras).
Si no te fias de controlar correctamente el ciclo infinito puedes regular el ciclo con el feof(archivo) tal como tenias.
Saludos
vosk