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 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].
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].