a ver si veis lo que falla

Hola llevo horas y horas sin conseguir que me funcione esto, no se donde esta el problema, si abro el archivo desde dentro de la funcion no me da problemas y me lee bien el archivo, pero si lo abro desde el void main al ejecutarlo me sale un error de que debe cerrarse el programa y no entiendo porqué, que puede ser??


void LeerMonstruo(FILE *sec, Tmonstruo *monstruo)
{


fscanf(sec,"%[^:]",monstruo->nombre);
fscanf(sec,"%d",&monstruo->arma);
fscanf(sec,"%d",&monstruo->escudo);
monstruo->codigo_objeto=-1;

printf("%s\n", monstruo->nombre);
printf("%d\n", monstruo->arma);
printf("%d\n", monstruo->escudo);
printf("%d\n", monstruo->codigo_objeto);

}

void main()
{
FILE *fm;
Tcadena nomf;
Tmonstruo *monstruo;

scanf("%s", nomf);
fm=fopen(nomf,"r");
LeerMonstruo(&fm,&monstruo);
printf("monstruos leidos correctamente\n");
fclose(fm);

}
Tienes problemas de punteros, en concreto con la forma en que pasas el fichero como argumento, mírate bien qué es lo que le pasas desde el main a LeerMonstruo.

Por cierto, usa un título descriptivo, le ahorras tiempo a la gente y entran los que sepan ayudarte, y cuando algo te dé un error... pon el error. Ya si usas la etiqueta code para código, montamos una fiesta.
perdon por los errores pero es que tengo la cabeza como un bombo, ya no se ni cuanto son 2 + 2. no entiendo a que te refieres, perdona mi torpeza, pero podrías ser un poco ma especifico?, es q lo que he visto en los libros está asi :S
Cuando llamas a LeerMonstruo no le estás pasando variables sino punteros, y los estás pasando por referencia, es decir, estás pasando un puntero a un puntero (**), sin embargo en LeerMonstruo defines los parámetros como punteros. El main lo tienes bien.

Bueno, eso creo :P
entonces deberia quitar el '&' de los parametros? :S
No. En LeerMonstruo debes definir los parámetros como tipo **var y debes usarlos como *var, ya que los parámetros son punteros por referencia y no variables. Con eso creo que debería irte.
Nunca he visto poner dos asteriscos :S, no se si es que estoy aprendiendo,
No se me ocurre otra forma de poder modificar un FILE desde una función, ya que es un puntero a una estructura, es decir, lo que tú estás pasando a la función es un puntero a un puntero a una estructura para poder modificarlo desde otra función. No sé, quizá me equivoque, tú prueba.

O eso o pasas el nombre del fichero a la función y lo abres y cierras en la misma.
(mensaje borrado)
8 respuestas