[C con Clase] Duda y problema con mi primer programa
Oscar
pelucheloko en hotmail.com
Mie Ago 15 14:38:37 CEST 2012
No veo nada práctico como trabaja C++ con el manejo de ficheros, creo que
tal y como lo veo, aprenderé mejor a almacenar los datos en una base de
datos mysql que tal vez me sirva más en un futuro. ¿cómo lo ve usted Don
Salvador Pozo?
-----Mensaje original-----
From: Salvador Pozo
Sent: Wednesday, August 15, 2012 12:05 PM
To: cconclase en listas.conclase.net
Subject: Re: [C con Clase] Duda y problema con mi primer programa
El pasado 2012-08-15 00:56:15, Oscar escribió:
O> Hola que tal como andan.
O> He escrito mi primer programa, de 100 y pico líneas, con satisfacción. Lo
he querido ampliar haciendo que se escriban los datos en un fichero, la idea
es que cuando abriese el programa de nuevo, al pedir el resumen leyese del
archivo. El problema es que se cargan datos que salen de solo Dios sabe que
cosa aleatoria de memoria saca, sé que tiene que ver con que no se cargan
los datos que yo quiero para las variables que quiero, y por eso me saca
datos aleatorios.
Hola:
He detectado varios errores de diseño.
El primer error es que cuando escribes en el fichero siempre escribes a
partir del la primera posición. Así, cuando escribes el sueldo, lo haces a
partir del principio, pero cuando escribes los gastos, también, de modo que
el valor del sueldo se sobrescribe con el de "coche". Si vuelves a escribir
un sueldo, se sobrescribe de nuevo el valor de "coche".
El segundo es más sutil y difícil de detectar. Si la última operación de
escritura es de "sueldo", tal como abres el fichero, este sólo contiene un
valor, el de "sueldo". Es decir, el fichero se trunca al tamaño de un "int".
El tercer error es que al crear el informe asumes un orden en los datos que
contiene el fichero: coche, movil, visa, comida, gasolina, abono, gastos y
sueldo. Pero ese orden no tiene por qué ser correcto, o mejor dicho, no
todos los valores estarán en el fichero.
Ahora bien, dentro de una ejecución del programa, como todas las variables
son miembros de un objeto de la clase, los valores asignados se mantienen
hasta que se modifiquen. Por otra parte, si una operación de lectura de un
valor falla, porque el fichero se ha terminado (por ejemplo), el valor de la
variable leída no se modifica, y para nosotros parece que se ha leído
correctamente.
Por eso, si modificamos gastos o ingresos, sin salir del programa, parece
que todo funciona bien, pero si salimos y entramos de nuevo, los valores de
la clase no se inician, y es cuando realmente nos damos cuenta de que no se
están leyendo desde el fichero.
Puedes comprobar esto verificando el valor de retorno de file.good() o
file.fail().
No sé si has visitado el apartado de la página sobre ficheros:
http://c.conclase.lan/ficheros/index.php?cap=001#inicio
Tal vez te aclare algunas cosas sobre ficheros de acceso secuencial y
aleatorio y sus peculiaridades.
Hasta pronto.
--
Salvador Pozo (Administrador)
mailto:salvador en conclase.net
_______________________________________________
Lista de correo Cconclase Cconclase en listas.conclase.net
http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net
Bajas: http://listas.conclase.net/index.php?gid=2&mnu=FAQ
Más información sobre la lista de distribución Cconclase