• Martes 21 de Enero de 2020, 07:07

Autor Tema:  Re: Control del final de un archivo de texto  (Leído 1213 veces)

Studiant

  • Nuevo Miembro
  • *
  • Mensajes: 8
    • Ver Perfil
Re: Control del final de un archivo de texto
« en: Sábado 8 de Marzo de 2003, 14:52 »
0
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 */
}

JuanK

  • Miembro de ORO
  • ******
  • Mensajes: 5393
  • Nacionalidad: co
    • Ver Perfil
    • http://juank.io
Re: Control del final de un archivo de texto
« Respuesta #1 en: Lunes 10 de Marzo de 2003, 13:47 »
0
: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:
[size=109]Juan Carlos Ruiz Pacheco
[/size]
Microsoft Technical Evangelist
@JuanKRuiz
http://juank.io

JuanK

  • Miembro de ORO
  • ******
  • Mensajes: 5393
  • Nacionalidad: co
    • Ver Perfil
    • http://juank.io
Re: Control del final de un archivo de texto
« Respuesta #2 en: Lunes 10 de Marzo de 2003, 13:54 »
0
: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:
[size=109]Juan Carlos Ruiz Pacheco
[/size]
Microsoft Technical Evangelist
@JuanKRuiz
http://juank.io

Studiant

  • Nuevo Miembro
  • *
  • Mensajes: 8
    • Ver Perfil
Control del final de un archivo de texto
« Respuesta #3 en: Martes 11 de Marzo de 2003, 00:21 »
0
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.