Care este specificatorul de format corect pentru double
în printf? Este %f
sau %lf
? Cred că este %f
, dar nu sunt sigur.
#include <stdio.h>
int main()
{
double d = 1.4;
printf("%lf", d); // Is this wrong?
}
"%f"
este formatul (sau cel puțin unul) corect pentru un dublu. Nu există niciun format pentru un float
, deoarece dacă încercați să treceți un float
la printf
, acesta va fi promovat la double
înainte ca printf
să-l primească1. "%lf"`` este, de asemenea, acceptabil în conformitate cu standardul actual -- se specifică faptul că
lnu are niciun efect dacă este urmat de specificatorul de conversie
f` (printre altele).
Rețineți că acesta este un loc în care șirurile de format printf
diferă substanțial de șirurile de format scanf
(și fscanf
, etc.). Pentru ieșire, treceți o valoare, care va fi promovată din float
în double
atunci când este trecută ca parametru variadic. Pentru intrare, treceți un pointer, care nu este promovat, așa că trebuie să îi spuneți lui scanf
dacă doriți să citiți un float
sau o double
, astfel încât pentru scanf
, %f
înseamnă că doriți să citiți un float
și %lf
înseamnă că doriți să citiți o double
(și, dacă mai contează, pentru un long double
, folosiți %Lf
fie pentru printf
, fie pentru scanf
).
Acesta poate fi %f
, %g
sau %e
, în funcție de modul în care doriți să formatați numărul. Consultați aici pentru mai multe detalii. Modificatorul l
este necesar în scanf
cu double
, dar nu și în printf
.
%Lf
(observați majuscula L
) este specificatorul de format pentru long doubles.
Pentru double
simple, este suficient %e
, %E
, %f
, %g
sau %G
.