2009-12-03 2 views
2

Je cette printf:Comment formater printf mieux si les choses ligne toujours

printf("name: %s\t" 
     "args: %s\t" 
     "value %d\t" 
     "arraysize %d\t" 
     "scope %d\n", 
     sp->name, 
     sp->args, 
     sp->value, 
     sp->arraysize, 
     sp->scope); 

Il est à l'intérieur d'une boucle, il est donc l'impression de plusieurs lignes pour une liste de pointeurs. Le problème est que si certaines choses imprimées sont plus longues ou plus courtes, les choses ne s'alignent pas. Comment puis-je l'aligner?

Répondre

8

Chaque spécificateur de conversion peut avoir une largeur de champ qui donne le nombre minimum de caractères que la conversion utilisera. Il existe d'autres indicateurs et une précision qui peuvent être utilisés pour contrôler la sortie (par exemple avec la conversion %s l'élément de précision indique combien de caractères maximum sera utilisé).

printf("name: %20.20s\t" 
     "args: %10.10s\t" 
     "value %6d\t" 
     "arraysize %6d\t" 
     "scope %6d\n", 
     sp->name, 
     sp->args, 
     sp->value, 
     sp->arraysize, 
     sp->scope); 
+0

Pouvez-vous s'il vous plaît nous dire quelle est la différence entre votre premier 20 et deuxième 20? – cokedude

3

Utilisez un numéro spécifique pour la longueur maximale de la chaîne, dans ce cas, 12:

printf("name: %12s", sp->name); 
3

Comme dtrosset dit:

printf("name: %12s\t" 
     // etc... 

Voici une documentation sur les chaînes de format printf:

http://www.cplusplus.com/reference/clibrary/cstdio/printf/

assurez-vous que le fi La largeur du champ que vous spécifiez est plus grande que celle que vous prévoyez d'imprimer. Si vous spécifiez% 2d, par exemple, puis imprimez 555, il sera toujours imprimé avec 3 caractères même si le reste de vos champs contient 2 caractères, et il ne sera pas aligné comme vous le souhaitez.

Questions connexes