C/Visual C - aclaracion

 
Vista:

aclaracion

Publicado por Oscar ivan (4 intervenciones) el 12/04/2003 16:52:07
bueno, como alclaracion, la variable dat, es de una estructura, por si hay alguna duda pongo el progrma completo mejor:

#include<iostream.h>
#include<stdio.h>
FILE *lectura, *escritura, *temp;
struct datosdeauto
{
char szserie[20], sznombred[40], szmodelo[30], szestado[100], szkms[15];
}dat;
char ccom;
void main()
{
lectura=fopen("autos.dat","rb");
escritura=fopen("lote.dat","w");
temp=fopen("temp.dat","w");
while(!feof(lectura))
{
fread(&dat,sizeof(dat),1,lectura);
cout<<"\nNombre del dueño: "<<dat.sznombred<<endl;
cout<<"Modelo: "<<dat.szmodelo<<endl;
cout<<"Numero de serie: "<<dat.szserie<<endl;
cout<<"Kilometraje: "<<dat.szkms<<endl;
cout<<"Estado: "<<dat.szestado<<endl;
cout<<"\nComprar el auto?: ";
cin>>ccom;
if(ccom=='s')
{
if(!feof(lectura))
{
fwrite(&dat,sizeof(dat),1,escritura);
}
}
else
{
if(!feof(lectura))
{
fwrite(&dat,sizeof(dat),1,temp);
}
}
}
fclose(escritura);
fclose(lectura);
fclose(temp);
escritura=fopen("autos.dat","w");
lectura=fopen("temp.dat","r");
while(!feof(lectura))
{
fr
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:porque loo lee dos veces entonces?

Publicado por oscar ivan (4 intervenciones) el 12/04/2003 16:53:51
estando asi el programa, porque a la hjora de leer el archivo me muestra el ultimo registro que haya 2 veces?
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:porque loo lee dos veces entonces?

Publicado por Ismael (230 intervenciones) el 12/04/2003 23:19:47
¿Puede que se resukva mendiante "lectura anticipada"?
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:porque loo lee dos veces entonces?

Publicado por gmantil (3 intervenciones) el 14/04/2003 17:48:11
Cuando se utiliza un feof(), el estado de fin de archivo solo se colocará en verdadero cuando se vuelve a hacer una lectura y ya no encuentra registro. Cuando el programa va a leer el último registro, el ciclo con feof() permite la entrada, lee el registro pero esta lectura coloca el apuntador de archivo en el fin de archivo pero el estado solo se volvera verdadero cuando se vuelva a intentar leer. El lee, pero como es fin de archivo, deja los datos del último registro leido. Una forma de corregir este error es colocar las sentencias de presentación de datos en un if.

if(!feof(lectura))
sentencias de presentación.

Espero haber sido claro.

gmantil
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