web-dev-qa-db-fra.com

flotteur au format printf avec rembourrage

Le code de test suivant produit une sortie indésirable, même si j'ai utilisé un paramètre de largeur:

int main(int , char* [])
{
    float test = 1234.5f;
    float test2 = 14.5f;

    printf("ABC %5.1f DEF\n", test);
    printf("ABC %5.1f DEF\n", test2);

    return 0;
}

Sortie

ABC 1234.5 DEF   
ABC  14.5 DEF

Comment obtenir une sortie comme celle-ci, quelle chaîne de format utiliser?

ABC 1234.5 DEF   
ABC   14.5 DEF
27
nabulke

Les éléments suivants devraient tout aligner correctement:

printf("ABC %6.1f DEF\n", test);
printf("ABC %6.1f DEF\n", test2);

Quand je lance ceci, j'obtiens:

ABC 1234.5 DEF
ABC   14.5 DEF

Le problème est que, dans %5.1f, les 5 est le nombre de caractères alloués pour le nombre entier, et 1234.5 prend plus de cinq caractères. Il en résulte un désalignement avec 14.5, qui tient en cinq caractères.

42
NPE

Vous essayez d'imprimer quelque chose de plus de 5 caractères, alors agrandissez votre spécificateur de longueur:

printf("ABC %6.1f DEF\n", test);
printf("ABC %6.1f DEF\n", test2);

La première valeur n'est pas "chiffres avant le point", mais "longueur totale".

8
JasonD