SoloCodigo

Programación General => C/C++ => Mensaje iniciado por: Mogly en Sábado 24 de Noviembre de 2007, 15:58

Título: Rellenar Una Matriz Desde Un Fichero
Publicado por: Mogly en Sábado 24 de Noviembre de 2007, 15:58
Hola necesito una ayuda para pasar el contenido de un fichero que es una matriz a una matriz para poder hacer cualquier cosa con ella
Código: Text
  1.  
  2. #include <stdio.h>
  3. #include <stdlib.h>>
  4.  
  5.  
  6. FILE *fich;
  7. int i;
  8. int matriz[5][5];
  9.  
  10. int main (int argc, char **argv){
  11.         if ( (fich = fopen(argv[1], "r")) == NULL){
  12.                 fprintf (stderr,"ERROR No se pudo abrir %s\n", argv[1]);
  13.                 exit (2);
  14.  
  15.         }
  16.         printf("cargar matriz de fichero\n");
  17.         i=0;
  18.         while (!feof(fich)){
  19.           fread(*(matriz+i),sizeof(int),5,fich);
  20.           i=i+1;
  21.         }
  22.  
  23.        
  24.         fclose(fich);
  25.  
  26. }
  27.  
  28.  
El ejemplo esta hecho para una matriz 5x5
El fichero donde esta la matriz se pasa como argumento
Agradeceria que me hecharais una mano a ver que pasa y por que el codigo que pongo no me rellena bien la matriz con los datos de fichero

este es el fichero de ejemplo
Código: Text
  1.  
  2. 4 5 6 7 8
  3. 7 9 8 6 5
  4. 3 4 1 2 2
  5. 2 3 4 5 6
  6. 6 7 9 0 1
  7. 7 8 9 0 9
  8. 3 4 7 7 8
  9.  
  10.  

Agradeceria otras sugerencias para poder solucionar este problema
Gracias.
Título: Re: Rellenar Una Matriz Desde Un Fichero
Publicado por: ProfesorX en Sábado 24 de Noviembre de 2007, 22:05
Estas leyendo el archivo, como si fuera un archivo binario, y en realidad, el archivo es de texto.

Tienes 2 opciones:

1. Crear el archivo de manera binaria, para poderlo leer de manera binaria.
2. Si utilizas archivos de texto, debes leer los datos como si fueran de texto, y hacer la conversion a int (binario).

Saludos :)
Título: Re: Rellenar Una Matriz Desde Un Fichero
Publicado por: diego.martinez en Lunes 26 de Noviembre de 2007, 09:46
tal como dice Profesor X, tienes que leer en modo texto , para ello, abre el fichero como "read text"

(fich = fopen(argv[1], "rt")   <- "rt"

luego para leer las filas puedes usar la funcion:

 fscanf( Handle_Fichero, "...", &v1,...);

puedes ver mejor como funciona en la doc, lo que tu querrias seria tal que:

fscanf( fich , "%d ", *(matriz+i));