C/Visual C - Problema

 
Vista:

Problema

Publicado por Adrian (6 intervenciones) el 30/04/2010 08:47:44
Hola amigos, tengo un problema. Os pongo en situación:
Tengo un trabajo que hacer en la uni, el cual contiene un txt llamado datos que tiene esta pinta:
100
15 30
------------------------------
---***------------------------
--*---*-----------------------
--*---*-----------------------
--*---*-----------------------
---***------------------------
------------------------------
------------------------------
------------------------**----
-----**----------------*--*---
----*--*----------------**----
----*--*----------------------
-----**-----------------------
------------------------------
------------------------------

el programa tiene que recoger el primer dato (100) el segundo y el tercero (15 y 30) y el tablero (lo que esta abajo del 15 30 xD)

total... que a la hora de pillar los primeros 3 numeros perfecto pero cuando se trata de recoger los diferentes valores de la tabla no me la coge bien, pongo el codigo y expongo el problema.

#include <stdio.h>
main()
{
FILE *datos;
int Generaciones, x, y,i,j,k,contador=0;
datos=fopen("datos.txt","r");
if (datos==NULL)
{
printf("Error obrint el fitxers\n");
}
else
{

fscanf(datos,"%d %d %d", &Generaciones, &x ,&y);
char Tablero[x][y],TableroTemp[x][y];
for(i=0;i<x;i++)
{
for(j=0;j<y+2;j++)
{
fscanf(datos, "%c", &Tablero[i][j]);
}
}
}

No os pongo el resto del codigo porke solo tengo el problema al recopilar la tabla.

Como veis he colocado un "extraño" '+2' en el segundo for para recopilar los datos de la tabla, haciendo eso consigo cojer todas las filas de la tabla pero no las ultimas 2 columnas, pero sin ponerlo no me coge la ultima fila.

Pregunta: Como hago para que me coja todas las filas y todas las columnas?¿

GRACIAS GENTE!!
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Problema

Publicado por Capitan Kirk (97 intervenciones) el 30/04/2010 14:55:14
1. El lugar donde declaras Tablero y TableroTemp no es el más adecuado. No sé si estás utilizando un compilador C ó C++, yo no utilizo C++ y no sé si permite hacerlo como lo has puesto, pero, desde luego, C no lo permite. Las declaraciones de variables, en C, deben colocarse fuera de las funciones (si son globales) ó al principio de las funciones, antes de comenzar con el código en sí.

2. Por lo que veo, en (x) guardas el número de filas del archivo y en (y) el número de columnas. En C, para las cadenas de caracteres necesitas un espacio adicional para guardar el carácter ASCII 0, que es el indicador de fin de cadena en C. Es decir, si necesitas almacenar 30 caracteres, tu cadena deberá tener espacio para, al menos, 31 caracteres.

Prueba a reservar espacio para tus tableros mediante el empleo de memoria dinámica, por ejemplo:

char **Tablero, **TableroTemp;
...
// Aquí ya he leído x e y
Tablero = (char **)calloc(x, sizeof(char *));
TableroTemp = (char **)calloc(x, sizeof(char *));
for (i=0; i<x; i++)
{
Tablero[i] = (char *)calloc(y+1, sizeof(char));
TableroTemp[i] = (char *)calloc(y+1, sizeof(char));
}

Para leer las filas, prueba con:

for (i=0; i<x; i++)
fgets(Tablero[i], y+1, datos);
fclose(datos);

y luego, cada carácter individual lo tendrás en Tablero[i][j].

Cuando ya no necesites más la memoria reservada con malloc (o alguna de sus parientes), debes liberarla, a ser posible en orden inverso a su creación:

for (i=x-1; i>=0; i--)
{
free(TableroTemp[i]);
free(Tablero[i]);
}
free(TableroTemp);
free(Tablero);

En cualquier caso, repasa el funcionamiento de malloc (y compañía), y el de fscanf (y compañía).

Espero que esto responda a tu pregunta. Saludos,
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Problema

Publicado por Adrian (6 intervenciones) el 01/05/2010 12:51:44
pues si ke me has dejado las cosas claras lo ke pasa es ke no me queria embarcar a utilizar tablas dinamicas e intente la xapucilla de [x][y] xDDD pero de todos modos creo que todo lo que me has puesto me servira de mucho y que despues de implementarlo conseguire que todo funcione correctamente.

Muchas gracias
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar