Buenas.
En clase estamos haciendo un programa que guarda en un fichero binario fichas de jugadores con su nombre, dni, etc. Ese programa primero lo hicimos con funciones y una array global. Luego con un puntero. Y ahora vamos a hacerlo guardando los datos en un archivo como he dicho. El tipo de estructura la declaro al inicio, fuera del main. Y fuera del main tambien, me declaro un puntero al archivo que guarda las fichas de los jugadores.
El problema es que no me guarda los cambios que hago en las fichas. Le doy a la funcion de listar todas las fichas que tiene guardadas (tiene un maximo de 15) y siempre me dice que esta vacia.
Al iniciar main, hago un fopen del fichero con "r+b", si no recuerdo mal. Y si me devuelve un NULL (el fichero no existe), hago un fopen pero con "w+b". Para diferenciar si una ficha esta vacia, marco el campo dorsal con un 99. Osea que si un jugador tiene en su ficha el dorsal 99, esa ficha esta en realidad vacia. Asi que si me devuelve un NULL el primer fopen, lo cual quiere decir que el archivo no existe, ejecuto el 2o ("w+b") y pongo las 15 fichas con el dorsal 99, para que asi esten todas vacias. Espero que lo haya explicado bien. El fclose lo hago al finalizar el main.
El problema es que cuando guardo una ficha nueva, me dice el programa que se ha guardado perfectamente. Pero cuando le doy a listar, me dice que todas estan vacias. En clase, ya a ultima hora, hemos probado a hacer un fopen cada vez que ejecutamos la funcion de guardar. Y antes de finalizar la funcion, un fclose. Asi parece que funcionaba bien. Al menos hemos creado una ficha y al listarla, la ha mostrado. Aunque no hemos probado mucho mas. Pero no se si seria muy correcto andar abriendo y cerrando el fichero cada vez que llamamos una funcion. Me imagino que lo mas optimo seria como lo tengo ahora, abrirlo al iniciar main, y cerrarlo al salir. Pero como digo, no funciona.
Alguien, con los datos que he dado, tiene idea de por que puede fallar?
Muchas gracias.