Ποιος είναι ο σωστός προσδιορισμός μορφής για το double
στην printf; Είναι %f
ή είναι %lf
; Πιστεύω ότι είναι %f
, αλλά δεν είμαι σίγουρος.
#include <stdio.h>
int main()
{
double d = 1.4;
printf("%lf", d); // Is this wrong?
}
"%f"
είναι η (ή τουλάχιστον μία) σωστή μορφή για ένα double. Δεν υπάρχει καμία μορφή για ένα float
, επειδή αν προσπαθήσετε να περάσετε ένα float
στην printf
, θα προαχθεί σε double
πριν το printf
το λάβει1. Το "%lf"
είναι επίσης αποδεκτό σύμφωνα με το τρέχον πρότυπο -- το l
ορίζεται ότι δεν έχει κανένα αποτέλεσμα αν ακολουθείται από τον προσδιορισμό μετατροπής f
(μεταξύ άλλων).
Σημειώστε ότι αυτό είναι ένα σημείο στο οποίο οι συμβολοσειρές μορφής printf
διαφέρουν σημαντικά από τις συμβολοσειρές μορφής scanf
(και fscanf
, κ.λπ.). Για την έξοδο, περνάτε μια τιμή, η οποία θα προαχθεί από float
σε double
όταν περάσει ως μεταβλητή παράμετρος. Για την είσοδο περνάτε ένα δείκτη, ο οποίος δεν προάγεται, οπότε πρέπει να πείτε στο scanf
αν θέλετε να διαβάσετε ένα float
ή ένα double
, οπότε για το scanf
, το %f
σημαίνει ότι θέλετε να διαβάσετε ένα float
και το %lf
σημαίνει ότι θέλετε να διαβάσετε ένα double
(και, για ό,τι αξίζει, για ένα long double
, χρησιμοποιείτε το %Lf
είτε για το printf
είτε για το scanf
).
<sub>,
Μπορεί να είναι %f
, %g
ή %e
ανάλογα με το πώς θέλετε να μορφοποιηθεί ο αριθμός. Δείτε εδώ για περισσότερες λεπτομέρειες. Ο τροποποιητής l
απαιτείται στην scanf
με double
, αλλά όχι στην printf
.
Το %Lf
(προσέξτε το κεφαλαίο L
) είναι ο προσδιορισμός μορφής για μεγάλους διπλούς.
Για απλούς διπλούς
, αρκούν τα %e
, %E
, %f
, %g
ή %G
.