Ver Mensaje Individual
  #2 (permalink)  
Antiguo 09/04/2013, 20:39
cesar_casla
 
Fecha de Ingreso: diciembre-2011
Ubicación: CABA
Mensajes: 433
Antigüedad: 12 años, 4 meses
Puntos: 94
Respuesta: Problema con struct y punteros. (y más :P)

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 original
  1. void guardar_pj(FILE *fp, Personaje **p1, Personaje **p2, int cont){ /* ...... */
Luego para acceder al puntero tenes que usar "*":
Código C:
Ver original
  1. *p2 = (Personaje *) realloc(*p1, cont*sizeof(Personaje));
  2.      if (*p2!=NULL) *p1=*p2;
  3. /* .... */

3 - Esto nose para q es:
Código C:
Ver original
  1. else printf("%d", 5);

4 -
Código C:
Ver original
  1. fgets(pj,6,fp);
  2.      p1[cont-1].ataque = (int) pj[0];
  3.      p1[cont-1].defensa = (int) pj[2];
  4.      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
  1. fgets(pj,6,fp);
  2.      p1[cont-1]->ataque = (int) pj[0]-32;
  3.      p1[cont-1]->defensa = (int) pj[2]-32;
  4.      p1[cont-1]->agilidad = (int) pj[4]-32;



Igual de todas formas, todo esto:
Código C:
Ver original
  1. while (!feof(fp)){
  2.           caracter = fgetc(fp);
  3.           if (caracter == '\n') line++;
  4.           else if (caracter == '('){
  5.                cont++;
  6.                guardar_pj(fp, &Pjs, &Pjs2, cont);
  7.           }
  8.     }
  9.  
  10. /* ............ */
  11.  
  12. fgets(pj,6,fp);
  13.      p1[cont-1]->ataque = (int) pj[0]-32;
  14.      p1[cont-1]->defensa = (int) pj[2]-32;
  15.      p1[cont-1]->agilidad = (int) pj[4]-32;
se puede resumir en(eso creo, no lo probe):
Código C:
Ver original
  1. Personaje aux; /* aux tambien podria haber sido un puntero */
  2. fscanf(fp,"(%d %d %d)",&aux.ataque,&aux.defensa,&aux.agilidad);


Saludos