Ver Mensaje Individual
  #2 (permalink)  
Antiguo 22/03/2014, 05:06
vosk
 
Fecha de Ingreso: agosto-2012
Mensajes: 601
Antigüedad: 12 años, 3 meses
Puntos: 83
Respuesta: Error con el buffer en archivo de texto

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 original
  1. while(1) {
  2.     if(fscanf(archivo, "%s", temp) == 1) {
  3.         //lectura correcta
  4.         printf("%s\t", temp);
  5.     }
  6.     else {
  7.         //control de errores
  8.         if(feof(archivo)) {
  9.             //final del archivo
  10.             //no es un error pero se trata como tal
  11.         }
  12.         else if(ferror(archivo)) {
  13.             printf("Se produjo un error de acceso");
  14.         }
  15.         else {
  16.             printf("Se produjo un error inesperado");
  17.         }
  18.        
  19.         //salgo del bucle
  20.         break;
  21.     }
  22. }

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