[C con Clase] Duda y problema con mi primer programa

Salvador Pozo salvador en conclase.net
Mie Ago 15 12:05:13 CEST 2012


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


Más información sobre la lista de distribución Cconclase