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

Llenar un arreglo desde un archivo de texto leido linea por linea

Estas en el tema de Llenar un arreglo desde un archivo de texto leido linea por linea en el foro de C/C++ en Foros del Web. hice esto para leer un archivo de texto y como hago para llenar una matriz para llenarlo a partir de esto.Hice un fragmento de codigo,por ...
  #1 (permalink)  
Antiguo 13/03/2008, 07:05
 
Fecha de Ingreso: septiembre-2007
Mensajes: 44
Antigüedad: 16 años, 8 meses
Puntos: 0
Llenar un arreglo desde un archivo de texto leido linea por linea

hice esto para leer un archivo de texto y como hago para llenar una matriz para llenarlo a partir de esto.Hice un fragmento de codigo,por favor revisenlo y diganme las posibles fallas...Gracias

---------------------------codigo:------------------------------------------
#include <stdio.h>

int main()
{
FILE *fp1;
char palabra[25][4];
int c;

fp1 = fopen("Prueba.htm", "r");

do
{
/* Obtiene una palabra del archivo */
c = fscanf(fp1, "%s", palabra);
if (c != EOF)
printf("%s\n", palabra); /* La despliega en pantalla */
}
while (c != EOF); /* Se repite hasta encontrar EOF */

fclose(fp1);

return 0;
}
  #2 (permalink)  
Antiguo 13/03/2008, 16:46
Avatar de Mephisto  
Fecha de Ingreso: enero-2006
Ubicación: Mexico DF
Mensajes: 184
Antigüedad: 18 años, 4 meses
Puntos: 3
Re: Llenar un arreglo desde un archivo de texto leido linea por linea

Bueno, yo pudiera hacer las siguientes observaciones:

1. Siempre es recomendable que condiciones la apertura del archivo, esto es, en lugar de colocar directamente

fp1 = fopen("Prueba.htm", "r");

poner lo siguiente
if((fp1 = fopen("Prueba.htm", "r"))==NULL){
printf("Error en apertura de archivo");
exit 1;
}

Con esto evitas que en caso de que el archivo no pueda ser abierto se genere una excepción en tu programa.

2. Tienes un array bidimensional y en la instrucción
fscanf(fp1, "%s", palabra);
lo mandas directamente al arreglo, esto no puede realizarse de esa forma, tienes que indicar el primer indice del arreglo

fscanf(fp1, "%s", palabra[0]);

3. En la definicion del array estableces
char palabra[25][4];
lo que diría que puedes almacenar hasta 25 palabras con una longitud de 3 caracteres cada una, ya que el cuarto caracter tiene que ser necesariamente un nulo ("\0")
Cuando lees el archivo, si la cadena que obtienes con fscanf es mayor de 3 caracteres desborda el array y se generará un comportamiento raro de tu prog o incluso una excepción.
Tambien al tener una while hasta el fin del archivo si se leen mas de 25 palabras se volverá a desbordar tu array.

Este tipo de procedimiento de manera personal lo realizaría a través de estructuras pero habría que considerar la funcionalidad que le darás al código que estas desarrollando...
__________________
Saludos...

Todos somos sabios, solo que en diferentes disciplinas...
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 20:36.