SoloCodigo

CLR: .Net / Mono / Boo / Otros CLR => C# => Mensaje iniciado por: Studiant en Sábado 8 de Marzo de 2003, 14:52

Título: Re: Control del final de un archivo de texto
Publicado por: Studiant en Sábado 8 de Marzo de 2003, 14:52
Como puedo controlar el final de un archivo de texto, que está formado por conjuntos de datos (estructuras) sin tener que leer la última estructura 2 veces? Ver ejemplo:
/**** calcula la edad media de todos los registros en el fichero dado ****/
void busca(FILE * p, struct datos * data)
{
   float media=0;  //acumula las edades
   int num=0;      //numero de registros leidos
   while(!feof(p)) //controlamos que hemos llegado al final del fichero
   {
      fscanf(p,"%s",data->nom);
      fscanf(p,"%s",data->apel1);
      fscanf(p,"%s",data->apel2);
      fscanf(p,"%s",data->tfno);
      fscanf(p,"%d",&data->edad);
      media+=(data->edad);
      num++;
   };
   printf(" La edad media de todos los registros del fichero es: %.2f",media/num);
   /*  %.2f modifica la salida del printf para mostrar solo 2 decimales del resultado */
}
Título: Re: Control del final de un archivo de texto
Publicado por: JuanK en Lunes 10 de Marzo de 2003, 13:47
:alien:
Ya provaste haciendo ...

do
{
     fscanf(p,"%s",data->nom);
     fscanf(p,"%s",data->apel1);
     fscanf(p,"%s",data->apel2);
     fscanf(p,"%s",data->tfno);
     fscanf(p,"%d",&data->edad);
     media+=(data->edad);
     num++;  
}while(!feof(p)) ;

creo que asi te sale más facil...
me cuentas vale?
:lightsabre:
Título: Re: Control del final de un archivo de texto
Publicado por: JuanK en Lunes 10 de Marzo de 2003, 13:54
:alien:
Por cierto...
esta pregunta deberias haberla abierto en el foro  de c y no en el de c# porque aunque ambos son c lo cierto es que son muy diferentes, de hecho el codigo que hemos tenido en el foro no sirve para nada en c#..con decirte que nisiquiera el printf
:think:
Título: Control del final de un archivo de texto
Publicado por: Studiant en Martes 11 de Marzo de 2003, 00:21
Tienes razón, este foro no es el adecuado. Me di cuenta tras haber escrito este post en este foro. Luego lo coloqué en el que tú me indicas.
Volviendo al problema indicado antes, el código original funciona correctamente, siempre y cuando el archivo del cual lees, no acabe en un carácter de retorno de carro: n
   El do-while funciona tambien, pero prefiero utilizar el while ya que al llegar a la última estructura, puedo comprobar si estoy en el final del archivo antes de ejecutar los fscanf.