Ver Mensaje Individual
  #5 (permalink)  
Antiguo 05/10/2013, 13:49
sfermat
 
Fecha de Ingreso: octubre-2012
Mensajes: 33
Antigüedad: 12 años, 2 meses
Puntos: 0
Respuesta: problema recorriendo un archivo en c

Cita:
Iniciado por vosk Ver Mensaje
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
  1. //ciclo infinito
  2. while(1) {
  3.     //lees y guardas el nº de elementos leidos
  4.     ncr = fscanf(archivo, "%s", leido);
  5.    
  6.     //comprovacion de estado
  7.     if(ncr > 0) {//ok
  8.         printf("%s\n", leido);
  9.     }
  10.     else if(ncr == EOF) {//eof
  11.         printf("EOF\n");
  12.         break;
  13.     }
  14.     else {//error
  15.         printf("Error %d\n", ferror(archivo));
  16.         break;
  17.     }
  18. }

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?