[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