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
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.
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".