Qual è lo specificatore di formato corretto per double
in printf? È %f
o è %lf
? Credo che sia %f
, ma non sono sicuro.
#include <stdio.h>
int main()
{
double d = 1.4;
printf("%lf", d); // Is this wrong?
}
"%f"
è il (o almeno uno) formato corretto per un doppio. Non c'è *un formato per un float
, perché se si tenta di passare un float
a printf
, verrà promosso a double
prima che printf
lo riceva1. "%lf"
è anche accettabile secondo lo standard corrente -- la l
è specificata come non avente effetto se seguita dallo specificatore di conversione f
(tra gli altri).
Si noti che questo è un posto in cui le stringhe di formato printf
differiscono sostanzialmente dalle stringhe di formato scanf
(e fscanf
, ecc.). Per l'output, stai passando un valore, che sarà promosso da float
a double
quando viene passato come parametro variabile. Per l'input stai passando un puntatore, che non viene promosso, quindi devi dire a scanf
se vuoi leggere un float
o un double
, quindi per scanf
, %f
significa che vuoi leggere un float
e %lf
significa che vuoi leggere un double
(e, per quello che vale, per un long double
, usa %Lf
sia per printf
che per scanf
).
sub>
%Lf
(nota la maiuscola L
) è lo specificatore di formato per i doppi lunghi.
Per i semplici "doppi", vanno bene sia %e
, %E
, %f
, %g
o %G
.