Problema al usar la función fscanf para leer datos en un vector.

Iniciado por dvc, 15 Abril 2012, 17:13 PM

0 Miembros y 1 Visitante están viendo este tema.

dvc

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.

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!

durasno

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
Ahorrate una pregunta, lee el man

dvc

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í?

durasno

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
Ahorrate una pregunta, lee el man