Título: Archivo binario, al leerlo me muestra 2 veces el ultimo registro Publicado por: .:BlackCoder:. en 4 Marzo 2011, 04:27 am Buenas, estaba retomando el tema de archivos pero me quede estancado :xD
Código
El programa muestra 2 veces el ultimo registro es decir, muestra: ALGUIEN 50 Otro 20 Otro 20 Por que? Título: Re: Archivo binario, al leerlo me muestra 2 veces el ultimo registro Publicado por: Littlehorse en 12 Marzo 2011, 18:33 pm Porque EOF devuelve true cuando ya pasaste por el final del archivo y no cuando estas a punto de pasarlo, por ende imprimes el contenido por duplicado.
Sigue paso por paso la ejecución del bucle en una hoja y chequea siempre cuales son los contenidos a imprimir, y quedara mas claro. Por lo pronto puedes solucionarlo así: Código
Saludos Título: Re: Archivo binario, al leerlo me muestra 2 veces el ultimo registro Publicado por: .:BlackCoder:. en 12 Marzo 2011, 21:04 pm Probe y si funciona pero no comprendo bien que sucede... read() devuelve un flujo, cierto? Cuando haces:
Código
aca la segunda condicion se cumple siempre y cuando no "lea" el eof...? Crei que era lo mismo que: Código
Pero nop... Es que acaso el flujo "ent" no se coloca en mal estado cuando lee el EOF?... Título: Re: Archivo binario, al leerlo me muestra 2 veces el ultimo registro Publicado por: Littlehorse en 12 Marzo 2011, 21:55 pm Claro, por eso dije "por lo pronto"; para que puedas ver la lógica del error.
En la ultima lectura se establece failbit y ent.read devuelve NULL en lugar de *this, ergo la condición ya no se cumple y por eso los datos no se repiten. Saludos Título: Re: Archivo binario, al leerlo me muestra 2 veces el ultimo registro Publicado por: .:BlackCoder:. en 12 Marzo 2011, 22:43 pm ent.read devuelve NULL en lugar de *this Gracias :D, no sabia esa parte, crei que devolvia *this, y si ponia el failbit en mal estado... En la ultima lectura se establece failbit Pero si en la ultima se establece failbit porque esto no funciona? Código
Yo creo que ciertamente devuelve null en vez de *this por el error... pero no establece por si sola el failbit en mal estado... Hice esto para usar la condicion con good(), no muestre el de nuevo el ultimo registro... Y no poner la lectura en la condicion del while (se ve raro xD) Código
Saludos... Título: Re: Archivo binario, al leerlo me muestra 2 veces el ultimo registro Publicado por: Littlehorse en 12 Marzo 2011, 23:25 pm Código
Esto no funciona como esperas porque cometes el mismo error que en el código anterior. Cuando ent.read devuelve NULL y se establece failbit, vos todavía estas dentro del bloque de ejecución del ciclo, por lo tanto imprimís una vez mas el contenido que leíste en la pasada anterior. En cuanto a lo de failbit, no lo he probado, pero estoy seguro, de hecho si así no fuese el código anterior seria un ciclo infinito. Prueba revisando los valores de retorno (para eso están ;D ) y quedara mas claro! Código
Saludos Título: Re: Archivo binario, al leerlo me muestra 2 veces el ultimo registro Publicado por: .:BlackCoder:. en 13 Marzo 2011, 05:58 am Ah ya me puse a probar un poco de cosas y vi que el failbit se coloca en true es despues de leer el EOF mas no al momento de leerlo...
Gracias por la ayuda me habia quedado trancado con esa duda :xD Saludos... |