Cita:
Iniciado por vosk 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
voy a intentar esto, en cuanto al código anterior de Fw160. El problema es que no llega a eof, sino que lee la última palabra dos veces antes del eof. Según el debug en un txt con "uno" "dos" las lecturas de fscan son: uno, dos, dos, eof... Por eso no serviría un control extra... Otra cuestión, estaba programando en linux, al pasar a windows ese mismo bucle pasa a ser infinito... Tiene explicación?