574 votes

Corriger spécificateur de format pour le double de printf

Quel est le spécificateur de format pour double dans printf? Est-il %f ou est-il %lf? Je crois que c' %f mais je ne suis pas sûr.

Exemple de Code

#include <stdio.h>
int main()
{
   double d =1.4;
   printf("%lf", d); //is this wrong?
}

761voto

Jerry Coffin Points 237758

"%f" est la (ou au moins "un") format correct pour une chambre double. Il n' est pas de format pour un float, parce que si vous essayez de passer un float de printf, ça va être promu double avant printf le reçoit. "%lf" est aussi acceptable en vertu de la norme actuelle -- l est spécifié comme n'ayant aucun effet si elle est suivie par l' f indicateur de conversion (entre autres).

65voto

mloskot Points 13971

Étant donné le C99 standard (à savoir, la N1256 projet), les règles dépendent de la fonction type: fprintf (printf, sprintf, ...) ou de scanf.

Voici les parties pertinentes extraites:

Avant-propos

Cette deuxième édition annule et remplace la première édition, la norme ISO/IEC 9899:1990, modifiée et corrigée par l'ISO/IEC 9899/COR1:1994, ISO/IEC 9899/AMD1:1995, et la norme ISO/IEC 9899/COR2:1996. D'importants changements à partir de la précédente édition comprennent:

  • %lf indicateur de conversion autorisés en printf

7.19.6.1 L' fprintf fonction

7 Les modificateurs de longueur et de leurs significations sont les suivantes:

l (apl) Spécifie que (...) n'a aucun effet sur une suite a, a, e, E, f, F, g, ou G indicateur de conversion.

L Spécifie qu'une suite a, a, e, E, f, F, g, ou G indicateur de conversion s'applique à un long double argument.

Les mêmes règles spécifiées pour fprintf s'appliquent pour l' printf, sprintf et des fonctions similaires.

7.19.6.2 L' fscanf fonction

11 Les modificateurs de longueur et de leurs significations sont les suivantes:

l (apl) Spécifie que (...) qu'une suite a, a, e, E, f, F, g, ou G indicateur de conversion s'applique à un argument de type pointeur sur double;

L Spécifie qu'une suite a, a, e, E, f, F, g, ou G de conversion rédacteur de devis s'applique à un argument de type pointeur à long double.

12 La conversion des prescripteurs et leurs significations sont les suivantes: a,e,f,g Correspond à un éventuellement signé nombre à virgule flottante (...)

14 La conversion des prescripteurs A, E, F, G et X sont aussi valables et se comportent de la même tant que, respectivement, un, e, f, g, et x.

La longue histoire courte, fprintf la suite des prescripteurs et des types correspondants sont précisés:

  • %f -> double
  • %Lf -> long double.

et pour fscanf il est:

  • %f -> float
  • %lf -> double
  • %Lf -> long double.

33voto

vitaut Points 10255

Il peut être %f, %g ou %e selon la façon dont vous voulez que le numéro de mise en forme. Voir ici pour plus de détails. L' l modificateur est nécessaire en scanf avec double, mais pas en printf.

12voto

Frédéric Hamidi Points 123646

%Lf (notez la majuscule L) est le spécificateur de format pour les long double.

Brut doubles, %e, %E, %f, %g ou %G le fera.

-2voto

Shamim Hafiz Points 8419

Non, c'est pas mal. Elle est correcte.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X