Was ist der richtige Formatbezeichner für "double" in printf? Ist es %f
oder ist es %lf
? Ich glaube, es ist %f
, aber ich bin mir nicht sicher.
#include <stdio.h>
int main()
{
double d = 1.4;
printf("%lf", d); // Is this wrong?
}
"%f"
ist das (oder zumindest ein) korrekte Format für einen Double. Es gibt kein Format für ein float
, denn wenn Sie versuchen, ein float
an printf
zu übergeben, wird es zu double
befördert, bevor printf
es erhält. "%lf"
ist nach dem aktuellen Standard ebenfalls akzeptabel - das l
ist so spezifiziert, dass es keine Auswirkungen hat, wenn es von dem Konvertierungsspezifizierer f
gefolgt wird (neben anderen).
Beachten Sie, dass dies ein Punkt ist, an dem sich printf
Formatstrings wesentlich von scanf
(und fscanf
, etc.) Formatstrings unterscheiden. Für die Ausgabe übergeben Sie einen Wert, der von float
zu double
gepromotet wird, wenn er als variabler Parameter übergeben wird. Für die Eingabe übergibt man einen Zeiger, der nicht promotet wird, also muss man scanf
sagen, ob man ein Float
oder ein Double
lesen will, also bedeutet %f
für scanf
, dass man ein Float
lesen will und %lf
, dass man ein Double
lesen will (und für ein long double
verwendet man %Lf
entweder für printf
oder scanf
).
Es kann %f
, %g
oder %e
sein, je nachdem, wie die Zahl formatiert werden soll. Siehe hier für weitere Details. Der l
-Modifikator ist in scanf
mit double
erforderlich, aber nicht in printf
.
%Lf" (beachten Sie das große "L") ist der Formatbezeichner für lange Doppelwerte.
Für einfache Doubles
ist entweder %e
, %E
, %f
, %g
oder %G
ausreichend.