Aký je správny špecifikátor formátu pre double
v printf? Je to %f
alebo %lf
? Myslím, že je to %f
, ale nie som si istý.
#include <stdio.h>
int main()
{
double d = 1.4;
printf("%lf", d); // Is this wrong?
}
"%f"
je správny (alebo aspoň jeden) formát pre dvojnásobok. Neexistuje žiadny formát pre float
, pretože ak sa pokúsite odovzdať float
do printf
, bude povýšený na double
skôr, ako ho dostane printf
1. "%lf"
je prijateľný aj podľa súčasného štandardu -- je špecifikované, že l
nemá žiadny účinok, ak za ním nasleduje špecifikátor konverzie f
(okrem iného).
Všimnite si, že toto je jedno z miest, kde sa formátovacie reťazce printf
podstatne líšia od formátovacích reťazcov scanf
(a fscanf
atď.). Pri výstupe odovzdávate hodnotu, ktorá sa pri odovzdaní ako variačný parameter povýši z float
na double
. Na vstup odovzdávate ukazovateľ, ktorý sa nepovýši, takže musíte povedať scanf
, či chcete čítať float
alebo double
, takže pre scanf
znamená %f
, že chcete čítať float
a %lf
, že chcete čítať double
(a čo je dôležité, pre long double
používate %Lf
buď pre printf
alebo scanf
).
%Lf
(všimnite si veľké L
) je špecifikátor formátu pre long doubles.
Pre obyčajné dvojčatá
postačí buď %e
, %E
, %f
, %g
alebo %G
.