fscanf e double

fscanf e double

por Marlon Ribas Vismari -
Número de respostas: 1
Olá Professor / Natan.

Suponhamos que temos um arquivo de entrada que tem apenas dados do tipo double. Se eu usar um fscanf com %f, da erro. Tem que fazer algum tratamento especial? Por exemplo, eu leio como char e depois faço a conversão?

Exemplo:

double *v1;

v1 = mallocX(n*sizeof(double)); /* com n >= 0 e inteiro */

fscanf(entrada, "%f ", &v1[n]);

Isso da um erro:

"Warning: format %f expects type float *, but argument 3 has type double *"

Obrigado
Em resposta à Marlon Ribas Vismari

Re: fscanf e double

por Francisco Reverbel -
Em vez de ler como uma sequência de chars e depois fazer a conversão, o mais fácil e prático e ler como double mesmo, usando "%lf" ou "%lg".

Note o "l" logo depois do "%"... Uma coisa chata do tipo double em C é a assimetria entre a escrita (printf) e a leitura (scanf). Para escrever um double, você passa "%f" ou "%g" para o printf. Para ler, você passa "%lf" ou "%lg" para o scanf.

Seu exemplo tem mais um problema: como v1 foi alocado com n elementos, você não pode fazer acesso a v1[n]. Pode ir no máximo até v1[n-1].