Question

J'ai cherché un peu mais je n'ai pas obtenu de réponse particulièrement claire.En C (et je suppose que C++), comment déterminer ce qui vient après le % lors de l'utilisation printf?.Par exemple:

double radius = 1.0;
double area = 0.0;
area = calculateArea( radius );
printf( "%10.1f     %10.2\n", radius, area );

J'ai pris cet exemple directement dans un livre que j'ai sur le langage C.Cela n'a aucun sens pour moi.Où trouvez-vous 10.1f et 10.2f?Quelqu'un pourrait-il expliquer cela?

Était-ce utile?

La solution

http://en.wikipedia.org/wiki/Printf#printf_format_placeholders est la référence Wikipédia pour les espaces réservés de format dans printf. http://www.cplusplus.com/reference/clibrary/cstdio/printf.html est également utile

Fondamentalement, sous une forme simple, c'est %[width].[precision][type].La largeur vous permet de vous assurer que la variable en cours d'impression a au moins une certaine longueur (utile pour les tableaux, etc.).Précision vous permet de spécifier la précision avec laquelle un nombre est imprimé (par ex.décimales, etc.) et informe C/C++ de la variable que vous lui avez donnée (caractère, entier, double, etc.).

J'espère que cela t'aides

MISE À JOUR:

Pour clarifier à l'aide de vos exemples :

printf( "%10.1f     %10.2\n", radius, area );

%10.1f (en référence au premier argument :rayon) signifie qu'il doit contenir 10 caractères (c.-à-d.pad avec des espaces), et imprimez-le sous forme de flotteur avec une décimale.

%10.2 (en référence au deuxième argument :zone) signifie qu'il comporte 10 caractères (comme ci-dessus) et qu'il est imprimé avec deux décimales.

Autres conseils

man 3 printf

sur un système Linux vous donnera toutes les informations dont vous avez besoin.Vous pouvez également trouver ces pages de manuel en ligne, par exemple sur http://linux.die.net/man/3/printf

10.1f signifie virgule flottante avec 1 chiffre après la virgule et 10 chiffres avant la virgule.Si le numéro comporte moins de 10 chiffres, il est complété par des espaces.10.2f est le même, mais avec 2 places après la virgule.

Sur tous les systèmes que j'ai vus, d'Unix aux migrations Rails, ce n'est pas le cas.@robintw l'exprime le mieux :

Fondamentalement, sous une forme simple, c'est %[width].[precision][type].

C'est-à-dire pas "10 places avant le point décimal", mais "10 chiffres, avant et après, y compris le point décimal."

10.1f signifie virgule flottante avec 10 caractères de large avec 1 chiffre après la virgule décimale.Si le numéro comporte moins de 10 chiffres, il est complété par des espaces.10.2f est le même, mais avec 2 places après la virgule.

Vous disposez de ces types de base :

%d   - integer
%x   - hex integer
%s   - string
%c   - char (only one)
%f   - floating point (float)
%d   - signed int (decimal)
%i   - signed int (integer) (same as decimal).
%u   - unsigned int
%ld  - long (signed) int
%lu  - long unsigned int
%lld - long long (signed) int
%llu - long long unsigned int

Modifier:il y en a plusieurs autres répertoriés dans la réponse de @Eli (man 3 printf).

En bref, ces valeurs après le % disent printf comment interpréter (ou afficher) toutes les variables à venir plus tard.Dans votre exemple, radius est interprété comme un flottant (c'est le 'f'), et le 10.1 donne des informations sur le nombre de décimales à utiliser lors de l'impression.

Voir ce lien pour plus de détails sur tous les modificateurs que vous pouvez utiliser avec printf.

10.1f signifie que vous souhaitez afficher un Fbeaucoup avec 1 décimal et le nombre affiché doit être 10 Longs caractères.

Les pages de manuel contiennent les informations souhaitées.Pour lire ce que vous avez ci-dessus :

printf( "%10.2f", 1.5 )

Cela imprimera :

         1.50

Alors que:

printf("%.2f", 1.5 )

Impressions :

1.50

Notez la justification des deux.De la même manière:

printf("%10.1f", 1.5 )

Imprime :

        1.5

N'importe quel numéro après le .est la précision que vous souhaitez imprimer.N'importe quel nombre avant le .est la distance depuis la marge gauche.

Une question qui n'a pas été soulevée par d'autres est de savoir si double est la même chose qu'un flotter.Sur certains systèmes, un spécificateur de format différent était nécessaire pour un double par rapport à un float.Notamment parce que les paramètres transmis peuvent être de tailles différentes.

 %f - float
 %lf - double
 %g - double

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top