SoloCodigo
CLR: .Net / Mono / Boo / Otros CLR => C# => Mensaje iniciado 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 */
}
-
: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:
-
: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:
-
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.