• Viernes 15 de Noviembre de 2024, 05:02

Mostrar Mensajes

Esta sección te permite ver todos los posts escritos por este usuario. Ten en cuenta que sólo puedes ver los posts escritos en zonas a las que tienes acceso en este momento.


Temas - Atreyu

Páginas: [1]
1
C/C++ / Cargar Archivo
« en: Lunes 12 de Septiembre de 2005, 20:10 »
Wenasss:

Estaba yo guardando y cargando una partida guardada de mi cuatro en raya, pero me da serios problemas a la hora de cargar el archivo guardado (es largo :argh:  pero espero dejarlo bastante claro):

int cargar (char * archivo, Jugprinc * x, Jugadorsec * y)
{
   char afirm;
   int num;
   int i, j;

   FILE * f;

   f = fopen (archivo, "r");

   if (!f)
      return ERROR_ABRE;

   do
   {
      num = fscanf (f, "%s", x->jugada.partida);
      if (num<10)
         return ERROR_ABRE;

/*Estas lineas son basicamente lo mismo que tenia en una unica orden pero separe porque me daban problemas tambien*/

      num = fscanf (f, "%d", x->filas);
      if (num!=1)
         return ERROR_ABRE;

      num = fscanf (f, "%d", x->columnas);
      if (num!=1)
         return ERROR_ABRE;

      num = fscanf (f, "%c", x->jugada.ficha);
      if (num!=1)
         return ERROR_ABRE;

      num = fscanf (f, "%c", y->ficha);
      if (num!=1)
         return ERROR_ABRE;

      num = fscanf (f, "%s", x->jugada.nombre);
      if (num!=1)
         return ERROR_ABRE;

      num = fscanf (f, "%s", y->nombre);
      if (num!=1)
         return ERROR_ABRE;

      num = fscanf (f, "%d", x->jugada.turno);
      if (num!=1)
         return ERROR_ABRE;

      for (i=0; i<x->filas; i++) //Se guarda el tablero que se crearia antes de este bucle
         for (j=0; j<x->columnas; j++)
         {
            num = fscanf (f, "%c", x->tablero[j]);
            if (num != 1)
               return ERROR_CARGA;
         }

      do
      {
         printf ("\n¿Cargar %s? s/n: ", x->jugada.partida);
         scanf ("%c", &afirm);
      }while ( afirm == 's' || afirm =='n');
   }while (afirm == 's');

   return OK;
}


Pues bien, el fallo me lo da al tratar de cargar el segundo dato (x->filas) que da un error de esos tan catastroficos de windows de enviar informe de errores... y con el depurador me da una ventana de error de unhanled expresion... acces violation.

Si os sirve el archivo guardado tiene una pinta tal que asi:

Antonieta
12
21
1
X
adsf
fda
0
(                                                                                                                                                                                                                                        1X1     X           )

Lo que hay entre parentesis es la tabla, ya que la mayoria son casillas en blanco, esta toda escrita sin espacios (igual tambien deberia guardarla como 0 de ASCII y no como espacios).

typedef struct
{
   char nombre [30];
   char ficha;
   int  turno;
   char partida [30];
} Jugadorsec;

typedef struct
{
   Jugadorsec jugada;
   int        filas, columnas;
   char       **tablero;   
} Jugprinc;

Agradeceria cualquier ayuda en este tema. ¿Puedo meter todo el cargado hasta la tabla en una linea como queria al principio o tengo que separarlo como he hecho aqui?

2
C/C++ / Memoria Dinamica
« en: Martes 30 de Agosto de 2005, 14:38 »
Hola:
Estaba intentando crear una tabla de dos dimensiones con memoria dinamica. Lo que no se es si puedo crearla en otra funcion que no sea main y que esta, después de meter el parámetro cuando la llamo desde main tambien se pueda usar sin problemas en void main()
Ademas me da una serie de problemas:


short crear_tablero (Jugadorrommel *tabla)
{
   int i;

   tabla->tablero = (char **) malloc (tabla->filas * sizeof (char *));

   if (tabla->tablero == NULL)
      return ERROR_MEMORIA;

   for (i=0; i< tabla->filas; i++)
      tabla->tablero = (char *) malloc (tabla ->columnas * sizeof (char));

}





typedef struct
{
   Jugadorsec   jugada;
   int                filas, columnas;
   char             *tablero;   
} Jugadorrommel;


Parece ser que la funcion siempre devuelve error y nunca crea la memoria con los siguientes warnings:

warning C4047: '=' : 'char *' differs in levels of indirection from 'char ** '
warning C4047: '=' : 'char ' differs in levels of indirection from 'char *'
warning C4715: 'crear_tablero' : not all control paths return a value

Agradeceria cualquier ayuda en esto

Páginas: [1]