Hola! tenes varios errores, te dejo algunas ya que el sueño me esta ganando:
1- Deberias inicializar el puntero Pjs a NULL porque sino la funcion realloc puede tirar error
2 - Si en la llamada de guardar_pj pasas la
direccion de los punteros, en la funcion debes almacenarlo como
puntero a puntero(cualquier cosa revisa el tema de pasaje por valor o por referencia). La funcion seria:
Código C:
Ver originalvoid guardar_pj(FILE *fp, Personaje **p1, Personaje **p2, int cont){ /* ...... */
Luego para acceder al puntero tenes que usar "*":
Código C:
Ver original*p2
= (Personaje
*) realloc(*p1
, cont
*sizeof(Personaje
)); if (*p2!=NULL) *p1=*p2;
/* .... */
3 - Esto nose para q es:
4 -
Código C:
Ver original p1[cont-1].ataque = (int) pj[0];
p1[cont-1].defensa = (int) pj[2];
p1[cont-1].agilidad = (int) pj[4];
esas asignaciones estan mal. Con esto pj[0] lo que haces es asignar el ascii de los caracteres pero no los numeros enteros, debes restarle 32 que representa el asci del '0'.. Proba haciendo:
Código C:
Ver original p1[cont-1]->ataque = (int) pj[0]-32;
p1[cont-1]->defensa = (int) pj[2]-32;
p1[cont-1]->agilidad = (int) pj[4]-32;
Igual de todas formas, todo esto:
Código C:
Ver original if (caracter == '\n') line++;
else if (caracter == '('){
cont++;
guardar_pj(fp, &Pjs, &Pjs2, cont);
}
}
/* ............ */
p1[cont-1]->ataque = (int) pj[0]-32;
p1[cont-1]->defensa = (int) pj[2]-32;
p1[cont-1]->agilidad = (int) pj[4]-32;
se puede resumir en(eso creo, no lo probe):
Código C:
Ver originalPersonaje aux; /* aux tambien podria haber sido un puntero */
fscanf(fp
,"(%d %d %d)",&aux.
ataque,&aux.
defensa,&aux.
agilidad);
Saludos