Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: palacio29 en 27 Agosto 2016, 04:22 am



Título: (Consulta) Funcion FgetS en arreglo bidemensional
Publicado por: palacio29 en 27 Agosto 2016, 04:22 am
Hola

Estoy recien empezando a ver archivos y queria saber como puedo copiar el contenido de un archivo de texto (.txt) en un arreglo bidemensional.
La idea seria que tengo un txt con varios nombres cargados

"Milan
Real Madrid
Ajax
Arsenal
Bayern Munich "

Y quiero pasar cada uno de los nombres a un arreglo de manera que si yo quiero imprimir el nombre "Milan", tendria que poner printf ("%s",arreglo[0]);

El codigo que hice hasta ahora es el siguiente.

Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. int main()
  5. {
  6.    char arreglo[5][20],fila=0,columna=0,aux;
  7.    FILE* arch;
  8.    arch=fopen("C:\\Users\\Usuario\\Desktop\\Equipos.txt","r");
  9.  
  10.    while (!feof(arch))
  11.    {
  12.        fgets(arreglo,20,arch);
  13.  
  14.    }
  15.  
  16.  
  17.    fclose(arch);
  18.    return 0;
  19. }
  20.  

El problema es que al intentar poner un printf para que muestre lo que hay en la posicion 0, no me sale nada o sale cualquier cosa, entonces basicamente no entiendo lo que hace la funcion fgets.
Entiendo que copia linea por linea, pero no se la manera de pasar esto a un arreglo ya que no me sale.


Título: Re: (Consulta) Funcion FgetS en arreglo bidemensional
Publicado por: JavierScars en 28 Agosto 2016, 23:32 pm
Código:
    while (!feof(arch))
    {
        fgets(arreglo,20,arch);
 
    }

Que estas leyendo? acuérdate que "arreglo" es un array

Mejor
Código:
int i = 0;
    while (!feof(arch))
    {
        fgets(arreglo[i],20,arch);
        puts(arreglo[i++]);
    }

También te recomiendo que compruebes siempre que puedas que el archivo se esta abriendo satisfactoriamente, asi

Código:
arch = fopen("C:\\Users\\Usuario\\Desktop\\Equipos.txt","r");
if(!arch)
{
   //Mensaje de error x
      return 1;
}

Ademas de eso por cuestiones de prevención de errores te sugiero que nunca hagas los arrays del tamaño justo que vas a usar hazlos un poco mas grandes y simplemente no uses los sobrantes  ;-)


Título: Re: (Consulta) Funcion FgetS en arreglo bidemensional
Publicado por: AlbertoBSD en 29 Agosto 2016, 14:09 pm
Hola todo bien con la respuesta de JavierScars

Solo me queda la duda del puts...
Segun yo solo deberia de ser:

Código
  1.    while (!feof(arch))
  2.    {
  3.        fgets(arreglo[i],20,arch);
  4.        i++;
  5.    }

palacio29 solo tienes que agregar el indice de la posicion del arreglo donde guardaras la entrada


Saludos