Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: dvc en 15 Abril 2012, 17:13 pm



Título: Problema al usar la función fscanf para leer datos en un vector.
Publicado por: dvc en 15 Abril 2012, 17:13 pm
Hola, soy nuevo en esto de la programación y tengo un pequeño problema, a ver si me podéis ayudar.

Estoy haciendo un programa donde, en una parte, estoy tratando de leer los datos de un fichero de texto y guardarlos en un vector, pero no consigo que me lea los datos "bien". Esto es el segmento de código donde creo que está el error.

Código:
if ((magnet=fopen("magnetizaciones.txt","rt"))==NULL)  //abrimos el fichero magnetizaciones.txt
{
printf("error en fichero %s \n","magnetizaciones.txt");
exit (1);
}
for (i=0;i<n;i++)
{
fscanf(magnet,"%f",&magnetizaciones[i]);
printf("%f\n",magnetizaciones[i]);
}

(Las variables int n, int i,FILE *magnet, double magnetizaciones[1000] están declaradas anteriormente. La variable n justo antes del segmento de código que he puesto vale 100).

El fichero magnetizaciones tiene guardados 100 números decimales en una columna:

0.011800
-0.003600
-0.002200
0.002200
...

En lugar de imprimirme por pantalla los números del fichero, me saca números muy grandes algo diferentes entre sí. Algo así:
-957650000000000
-957645000000000
-957634500000000
...

¿Alguien sabe donde puede estar el error? Creo que debo estar usando mal la función scanf pero no sé por qué.
Muchas gracias por adelantado!


Título: Re: Problema al usar la función fscanf para leer datos en un vector.
Publicado por: durasno en 15 Abril 2012, 20:50 pm
Hola! asi como esta el codigo no veo ningun error. En ves de usar %f proba con %lf ya que es un double sino subi todo el codigo

Saludos


Título: Re: Problema al usar la función fscanf para leer datos en un vector.
Publicado por: dvc en 15 Abril 2012, 21:43 pm
Muchísimas gracias!
He puesto %lf y ya me lee bien los datos. Si no he entendido mal, para leer datos guardados como doubles tienes que poner lf y para leer datos guardados como floats puedes poner tanto %lf como %f.
¿Es así?


Título: Re: Problema al usar la función fscanf para leer datos en un vector.
Publicado por: durasno en 15 Abril 2012, 22:12 pm
mmm no. si un numero fue guardado, en el archivo, como float o double no tiene nada que ver. EL tema es con que precision queres recuperar esos datos; como vos definiste a tu arreglo magnetizaciones de tipo double lo correcto es usar %lf, ahora si el arreglo hubiese sido float usarias %f

Saludos


Título: Re: Problema al usar la función fscanf para leer datos en un vector.
Publicado por: dvc en 15 Abril 2012, 22:16 pm
Entendido.
Gracias por ayudarme!