Ver Mensaje Individual
  #4 (permalink)  
Antiguo 01/10/2013, 12:28
vosk
 
Fecha de Ingreso: agosto-2012
Mensajes: 601
Antigüedad: 12 años, 4 meses
Puntos: 83
Respuesta: problema recorriendo un archivo en c

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