Foros del Web » Programación para mayores de 30 ;) » C/C++ »

Rellenar una matriz desde un archivo .txt C

Estas en el tema de Rellenar una matriz desde un archivo .txt C en el foro de C/C++ en Foros del Web. Hola, soy principiante en esto de la programación en C, y llevo atascado con un problema varios dias, básicamente, estoy intentando rellenar una matriz con ...
  #1 (permalink)  
Antiguo 01/05/2012, 11:15
 
Fecha de Ingreso: mayo-2012
Mensajes: 3
Antigüedad: 11 años, 11 meses
Puntos: 0
Rellenar una matriz desde un archivo .txt C

Hola, soy principiante en esto de la programación en C, y llevo atascado con un problema varios dias, básicamente, estoy intentando rellenar una matriz con caracteres (#,@,*,y espacios) abriendo un archivo txt que tiene como datos dichos caracteres.La cuestion es que al comprobar si la matriz se ha rellenado correctamente, veo que me imprime bien el recinto(hasta una determinada posicion), pero al final imprime basura y dependiendo del fichero a veces ni lo imprime completo.., y no se que hacer... si alguien ve mi error... muchisimas gracias de antemano!
Código C:
Ver original
  1. #include <stdio.h>
  2. #include <windows.h>
  3. #include<string.h>
  4. #define DIN 20
  5. void abrirlab();
  6. int main ()
  7. {
  8.     system("color 0e");
  9.     abrirlab();
  10.     system("PAUSE");
  11. }
  12. void abrirlab()
  13. {
  14.      FILE *filePtr;
  15.      int dimx,dimy,longitud,i,j;
  16.      char fileName[DIN],car;
  17.      printf("COMPROBADOR DE LABERINTOS\nEscribe el nombre del archivo: ");
  18.      scanf("%s",fileName);
  19.      
  20.     if((filePtr=fopen(fileName,"r"))!=NULL)
  21.     {
  22.  
  23.         fscanf(filePtr,"%d %d",&dimx,&dimy);
  24.         char lab[dimx][dimy];
  25.    fseek(filePtr, 0, SEEK_SET);
  26.    while(fgetc (filePtr)!= '\n')
  27.    {
  28.    }
  29.    for(i=0;i<dimx;i++)
  30.    {
  31.                       for(j=0;j<dimy;j++)
  32.                       {
  33.                                          fscanf(filePtr,"%c",&lab[i][j]);
  34.                       }
  35.    }
  36.    
  37.    /*
  38.     for(i=0;i<dimx;i++)
  39.    {
  40.                       for(j=0;j<dimy;j++)
  41.                       {
  42.                                          printf("%c",lab[i][j]);
  43.                       }
  44. */
  45.    fclose(filePtr);
  46.     }
  47.     else
  48.     {
  49.         printf("El archivo se puede abrir %s\n",fileName);
  50.     }
  51. }
El archivo txt seria por ejemplo:
10 10
##########
# # #
# # # #
# # # # #
# # # #
#@# # ##
###*# #
## ##
# #
##########

Última edición por fxmarquez; 01/05/2012 a las 12:52
  #2 (permalink)  
Antiguo 02/05/2012, 01:25
 
Fecha de Ingreso: diciembre-2011
Ubicación: CABA
Mensajes: 433
Antigüedad: 12 años, 4 meses
Puntos: 94
Respuesta: Rellenar una matriz desde un archivo .txt C

Hola! El problema es que estas intentado imprimir toda la matriz lab, pero la matriz no tiene todas las posiciones ocupadas con caracteres del archivo, tiene solo hasta una "x" posicion despues el resto es basura

Tenes q encontrar la manera de saber hasta donde imprimir, osea en los for (de imprimir) no tendrias que poner como condicion i<dimx y j<dimj, ya que con eso estas obligando a q imprima toda la matriz... Una forma de resolverlo podria ser tener en cuenta lo que retorna fscanf

Fijate si te sale sino segui preguntando. Saludos

Última edición por cesar_casla; 02/05/2012 a las 01:31
  #3 (permalink)  
Antiguo 02/05/2012, 03:14
 
Fecha de Ingreso: mayo-2012
Mensajes: 3
Antigüedad: 11 años, 11 meses
Puntos: 0
Respuesta: Rellenar una matriz desde un archivo .txt C

cesar_casla, muchas gracias por ayudarme, el problema que tengo no es tanto al imprimir(ya que eso lo hago para comprobar si ha cogido bien las posiciones), lo que pasa es que quiero almacenar esos caracteres en una matriz[dimx][dimy], y no lo hace bien, como tu dices , luego me coge basura, entonces, necesito la forma de hacer que el puntero se pase a la siguiente fila, una vez llegado al limite del recinto, y no se como hacerlo....Aqui tienes un ejemplo de lo que quiero capturar: en este caso el archivo tendria 10 filas cada una con 10 caracteres.(las almohadillas no aparecen bien alineados, pero las ultimas tendrian que llegar hasta la posicion 10 rellenando con espacios..)
##########
# # ###
#### #
#@ #
##### #
# #
### #
#* # #
## # #
##########
  #4 (permalink)  
Antiguo 02/05/2012, 05:26
 
Fecha de Ingreso: abril-2010
Ubicación: Rosario
Mensajes: 1.850
Antigüedad: 14 años
Puntos: 228
Respuesta: Rellenar una matriz desde un archivo .txt C

Primer error es declarar un arreglo statico desde variables.

char lab[dimx][dimy];

Usa memoria dinamica, con malloc o declara una constante para definir un maximo....

En el archivo que tienes los espacio finales, existe??? Existan o no, no estas teniendo en cuenta los saltos de linea, esos cuentan como caracteres tambien.

Código C:
Ver original
  1. char c;
  2. for(j=0;j<dimy;j++)
  3. {
  4.        i = 0;
  5.       while ( ( c =fgetc(filePtr) ) != '\n' )   lab[j][i++] = c;
  6. }


Tambien fijate que el fseek esta de mas, lees las dimensiones y te volves a colocar al principio del archivo. No tiene sentido eso.

Etiquetas: int, matriz, programa, rellenar, string, txt
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 22:36.