Milline on õige vormingupunkt "double" printfis? Kas see on %f
või %lf
? Ma usun, et see on %f
, kuid ma ei ole kindel.
#include <stdio.h>
int main()
{
double d = 1.4;
printf("%lf", d); // Is this wrong?
}
"%f"
on (või vähemalt üks) õige vorming topelt. Formaat float
jaoks ei ole, sest kui sa üritad float
i printf
ile üle anda, muutub see double
iks, enne kui printf
saab selle1. "%lf"
on praeguse standardi kohaselt samuti aktsepteeritav -- l
on määratletud, et sellel ei ole mingit mõju, kui sellele järgneb (muu hulgas) konverteerimise spetsiifikaator f
.
Pange tähele, et see on üks koht, kus printf
-formaatjooned erinevad oluliselt scanf
(ja fscanf
jne) formaatjoontest. Väljundi jaoks edastad sa väärtuse, mis tõstetakse float'ist
double'-ks, kui see antakse üle variatiivse parameetrina. Sisendiks edastad sa näitaja, mida ei edendata, nii et sa pead scanf
ile ütlema, kas sa tahad lugeda float
i või double
i, nii et scanf
i puhul tähendab %f
, et sa tahad lugeda float
i ja %lf
, et sa tahad lugeda double
i (ja, kui see on midagi väärt, siis long double
i puhul kasutad %Lf
i kas printf
i või scanf
i puhul).
%Lf
(pange tähele suurt "L") on formaadi täpsustaja pikkade paaride jaoks.
Tavalise double
puhul piisab kas %e
, %E
, %f
, %g
või %G
.