Comment formater des chaînes en utilisant printf () pour obtenir la même longueur dans la sortie?

StackOverflow https://stackoverflow.com/questions/1809399

  •  05-07-2019
  •  | 
  •  

Question

J'ai deux fonctions, l'une qui produit des messages tels que Initialisation en cours ... et l'autre qui vérifie les codes de retour et génère "Ok", , " Avertissement "" ou "Erreur" . Cependant, la sortie produite est de longueur différente:

Starting initialization...Ok.
Checking init scripts...Ok.

Comment puis-je obtenir quelque chose comme ceci:

Starting initialization...       Ok.
Checking init scripts...         Ok.
Était-ce utile?

La solution

Vous pouvez spécifier une largeur pour les champs de chaîne, par exemple.

printf("%-20s", "initialization...");

et tout ce qui est imprimé avec ce champ sera rempli de blancs à la largeur que vous indiquez.

Le - à gauche justifie votre texte dans ce champ.

Autres conseils

printf permet de formater avec des spécificateurs de largeur. par exemple


printf( "%-30s %s\n", "Starting initialization...", "Ok." );

Vous utiliseriez un spécificateur de largeur négative pour indiquer une justification à gauche, car la valeur par défaut consiste à utiliser une justification à droite.

De plus, si vous souhaitez avoir la possibilité de choisir le width , vous pouvez choisir l'un des deux formats suivants (avec ou sans troncature):

int width = 30;
//no truncation uses %-*s
printf( "%-*s %s\n", width, "Starting initialization...", "Ok." );
// output is "Starting initialization...     Ok."

//truncated to the specified width uses %-.*s
printf( "%-.*s %s\n", width, "Starting initialization...", "Ok." ); 
// output is "Starting initialization... Ok."

Il existe également le modificateur % n qui peut aider dans certaines circonstances. Il retourne la colonne sur laquelle la chaîne était si loin. Exemple: vous voulez écrire plusieurs lignes qui sont dans la largeur de la première ligne comme un tableau.

int width1, width2;
int values[6][2];
printf("|%s%n|%s%n|\n", header1, &width1, header2, &width2);

for(i=0; i<6; i++)
   printf("|%*d|%*d|\n", width1, values[i][0], width2, values[i][1]);

imprimera 2 colonnes de la même largeur quelle que soit la longueur que les deux chaînes header1 et header2 peuvent avoir. Je ne sais pas si toutes les implémentations ont le % n , contrairement à Solaris et Linux.

Il existe également une solution plutôt peu technique consistant à compter manuellement l'ajout d'espaces pour aligner vos messages. Rien ne vous empêche d'inclure quelques espaces de fin dans vos chaînes de messages.

Commencez par utiliser des tabulations, le modificateur de caractère \ t . Il avance à un endroit fixe (colonnes, jargon du terminal). Toutefois, il n’est pas utile d’obtenir des différences supérieures à la largeur de la colonne (4 caractères, si je me souviens bien).

Pour résoudre ce problème, écrivez votre message "OK / NOK". utilisez un nombre fixe d’onglets (5? 6 ?, essayez-le), puis retournez ( \ r ) sans nouvelle ligne et écrivez votre message.

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