C/Visual C - AYUDA FICHEROS TXT

 
Vista:

AYUDA FICHEROS TXT

Publicado por quikiss (6 intervenciones) el 01/06/2006 19:30:33
Hola a todos..
He escrito el siguiente codigo la función DATOS guarda los datos en un fichero de texto, pero no consigo que la funcion MEJORNOTA me lee los datos del fichero, que estoy haciendo mal? Gracias..
void Datos(FILE *flFichero)
{
char cContinuar;
struct tRegistro Registro;

flFichero=fopen("alumnos.txt","a");
if(flFichero == NULL)
{
printf("Nose puede crear el fichero");
getch();
}
do{
clrscr();
fflush(stdin);
printf("\nTeclee el nombre:");
scanf("\n%s",&Registro.sNombre);
do{
printf("\nTeclee el sexo(V/M):");
scanf("%c",&Registro.cSexo);
}while(!(Registro.cSexo=='V')&& !(Registro.cSexo=='M'));
printf("\nTeclee la nota del primer trimestre: ");
scanf("\n%f",&Registro.fNota1);
printf("\nTeclee la nota del segundo trimestre:");
scanf("\n%f",&Registro.fNota2);
printf("\nTeclee la nota del tercer trimestre:");
scanf("\n%f",&Registro.fNota3);
Registro.fNotaMedia=(Registro.fNota1+Registro.fNota2+Registro.fNota3)/3;

fprintf(flFichero,"%s\t%c\t%.2f\t%.2f\t%.2f\t%.2f\n",Registro.sNombre,Registro.cSexo,Registro.fNota1,Registro.fNota2,Registro.fNota3,Registro.fNotaMedia);
printf("quieres continuar (S/N)?");
scanf("\n%c",&cContinuar);

}while(toupper(cContinuar)=='S');
fclose(flFichero);
}

void MejorNota(FILE *flFichero)
{
tRegistro Registro;
int i;
float fMejorNota=0;
char sAlumnoMejor[30];
if((flFichero=fopen("alumnos.txt","r"))==NULL)
{
printf("Error:No He podido abrir el fichero\n");
getch();
}
fscanf(flFichero,"%s\t%c\t%.2f\t%.2f\t%.2f\t%.2f\n",Registro.sNombre,Registro.cSexo,Registro.fNota1,Registro.fNota2,Registro.fNota3,Registro.fNotaMedia);
printf("\nNombre: ",Registro.sNombre);
printf("\nNota Media: ",Registro.fNotaMedia);
while(!feof(flFichero))
{
fscanf(flFichero,"\n%s\t%c\t%f\t%f\t%f\t%f",&Registro.sNombre,&Registro.cSexo,&Registro.fNota1,&Registro.fNota2,&Registro.fNota3,&Registro.fNotaMedia);
printf("\nNombre: ",Registro.sNombre);
printf("\nNota Media: ",Registro.fNotaMedia);
if(Registro.fNotaMedia>fMejorNota)
fMejorNota=Registro.fNotaMedia;
strcpy(sAlumnoMejor,Registro.sNombre);

}
fclose(flFichero);
printf("\nEl alumno que mejor nota media ha obtenido es %s ",sAlumnoMejor);
getch();
}
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:AYUDA FICHEROS TXT

Publicado por Juan (68 intervenciones) el 01/06/2006 19:50:56
Cuantas personas tienes en el archivo? Una sola? si es asi es porque la primera lectura la haces fuera del mientras, y se pierda, si lo haces con un do while eso no pasaria. Prueba y comentas a ver que otra cosa pudo haber sido (porque los formatos de lectura y escritura son los mismos)

void MejorNota(FILE *flFichero)
{
tRegistro Registro;
int i;
float fMejorNota=0;
char sAlumnoMejor[30];
if((flFichero=fopen("alumnos.txt","r"))==NULL)
{
printf("Error:No He podido abrir el fichero\n");
getch();
}
do
{
fscanf(flFichero,"\n%s\t%c\t%f\t%f\t%f\t%f",&Registro.sNombre,&Registro.cSexo,&Registro.fNota1,&Registro.fNota2,&Registro.fNota3,&Registro.fNotaMedia);
printf("\nNombre: ",Registro.sNombre);
printf("\nNota Media: ",Registro.fNotaMedia);
if(Registro.fNotaMedia>fMejorNota)
fMejorNota=Registro.fNotaMedia;
strcpy(sAlumnoMejor,Registro.sNombre);

} while(!feof(flFichero))
fclose(flFichero);
printf("\nEl alumno que mejor nota media ha obtenido es %s ",sAlumnoMejor);
getch();
}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:AYUDA FICHEROS TXT

Publicado por quikiss (6 intervenciones) el 01/06/2006 20:18:00
Hola Juan!!
Acabo de probar tu codigo y me sigue sin funcionar, el fichero me lo crea muy bien y con los datos pero la función de lectura no me funciona me devuelve los campos en blanco..
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:AYUDA FICHEROS TXT

Publicado por Juan (68 intervenciones) el 01/06/2006 22:14:34
Vi algo...
Lo que yo creo es que el no lee porque el archivo no coincide con el formato al momento de leer.
No me fije que las lineas que tienes en el metodo de lectura comienzan por un \n.
Tu cadena de lectura deberia ser identica a como fue tu cadena de escritura.
Cambia eso en el String, y lo otro que te recomiendo, que aunque no lo hace mas eficiente lo hace mas legible, es que obtengas campo por campo, cada uno con su punto o con su \n si es el ultimo campo.
Cuando el formato no coincide, sencillamente el archivo no lee nada y las variables no se modifican.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar