Un problema de autobuses

Ya he comenzado a hacer ejercicios de examen y los veo bastante fáciles. He hecho un programa de primos (de esos que antes del examen se me atragantaban bastante) y me ha salido bien.
Ahora estoy con uno de registros y ficheros.
Es un programa que, dados tres ficheros, toma la información de cada autobús (estructura de autobús --> Linea y nº billetes), y el programa dice qué autobús ha tenido más viajeros en los 3 días que representan los 3 ficheros a pedir).
Bien, la estructura del programa es correcta. Lo único que me falla es lo siguiente:
Yo abro un vector, es decir, f = fopen (fichero, "modo"). F, si no recuerdo mal, era un puntero que señalaba al fichero. Lo que yo quiero es pasar este puntero a una función, para no tener que abrir un fichero 2 veces. Y mi cuestión es que no sé cómo se hace esto.
Verás en mi programa cómo lo he hecho. Lo puedes ver en donde siempre:
http://rafb.net/paste/results/J2724351.html

1 Respuesta

Respuesta
1
Aquí la verdad es que no te puedo ayudar demasiado.
Si fuera en C++ en vez de en C podría intentar algo, pero con el C tengo muchísima menos experiencia.
De todas formas se supone que solamente es pasar un puntero y debería funcionar aunque te aconsejo que cierres y abras de nuevo el archivo, sería solamente cambiar de posición las dos líneas en las que llamas a la función y cierras el archivo y, por supuesto, abrir y cerrar de nuevo el archivo en la otra función.
Otra cosa que he visto en el código es mezclas, aunque de una forma más o menos sutil, C con C++, lo cual aunque se puede hacer no es muy aconsejable pues a veces te puede dar ciertos problemas difíciles de resolver y sobre todo de encontrar.
Me refiero al tema de pasar punteros por referencia, en C no existe, si existiendo en C++. Para emular esta característica de C++ en C tendrías que poner como parámetro un puntero doble.
Intenta hacerlo de esta forma a ver si así si que te funciona. Es más, podrías incluso pasar el puntero tal cual a la función (sin pasarlo por referencia ni como puntero doble) puesto que no te importa si al volver de la función este haya variado o no ya que justo después de que vuelva lo cierras.
También lo que podrías hacer (que es lo que yo hago cuando se me presenta algún problema por el estilo) es crearte un pequeño, lo más pequeño posible, programa en el que hacer pruebas pasando este tipo de punteros a una función y viendo si funciona o no, cambia cosas aunque algunas te parezcan que no van a funcionar, igual das con la forma correcta de hacerlo y de paso estás aprendiendo bastante sobre este tema en particular.
Vale, lo he dicho como me comentaste y sí que ha salido. Fue una torpeza no darme cuenta de que como lo hacía yo era innecesariamente más difícil. Lo que hago es apuntarme en el código comentarios, y en los días previos al examen me los miraré para que no caiga en los mismos fallos.
Yo compilo los programas primero en el Devcpp, que es más "ligero y cómodo", y si hay bastantes errores copio el código en el Visual C++, que me dice exactamente en la mayoría de los casos dónde me equivoco. Una gran ayuda, sin duda.
Te dejo el código del programa acabado por si lo necesitas:
http://rafb.net/paste/results/o2825279.html
Gracias!

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas