web-dev-qa-db-fra.com

Impression gauche avec espaces

Comment puis-je remplir une chaîne avec des espaces à gauche lorsque j'utilise printf?

Par exemple, je veux imprimer "Bonjour" avec 40 espaces le précédant.

De plus, la chaîne que je veux imprimer se compose de plusieurs lignes. Dois-je imprimer chaque ligne séparément?

EDIT: Juste pour être clair, je veux exactement 40 espaces imprimés avant chaque ligne.

99
titaniumdecoy

Si vous souhaitez que le mot "Hello" soit imprimé dans une colonne large de 40 caractères avec des espaces à gauche, utilisez la procédure suivante.

char *ptr = "Hello";
printf("%40s\n", ptr);

Cela vous donnera 35 espaces, puis le mot "Bonjour". C’est ainsi que vous formatez les choses lorsque vous savez quelle est la largeur de la colonne, mais que les données changent (enfin, c’est n vous pouvez le faire).

Si vous savez que vous voulez exactement 40 espaces puis du texte, enregistrez simplement les 40 espaces dans une constante et imprimez-les. Si vous devez imprimer plusieurs lignes, utilisez plusieurs instructions printf comme celle ci-dessus ou faites-le en boucle, en modifiant la valeur de ptr à chaque fois.

108
Bill the Lizard

J'utilise cette fonction pour mettre en retrait ma sortie (par exemple, pour imprimer une arborescence). Le indent est le nombre d'espaces avant la chaîne.

void print_with_indent(int indent, char * string)
{
    printf("%*s%s", indent, "", string);
}
64
jk_
int space = 40;
printf("%*s", space, "Hello");

Cette instruction réservera une ligne de 40 caractères et affichera une chaîne de caractères à la fin de la ligne (en supprimant les espaces supplémentaires tels que la longueur totale de la ligne soit constante à 40). Same peut être utilisé pour les caractères et les entiers comme suit:

printf("%*d", space, 10);
printf("%*c", space, 'x');

Cette méthode utilisant un paramètre pour déterminer les espaces est utile lorsqu'un nombre variable d'espaces est requis. Ces instructions fonctionneront toujours avec les littéraux entiers comme suit:

printf("%*d", 10, 10);
printf("%*c", 20, 'x');
printf("%*s", 30, "Hello");

J'espère que cela aidera quelqu'un comme moi à l'avenir.

33
Rece Foc

Si vous voulez exactement 40 espaces avant la chaîne, vous devriez juste faire:

printf("                                        %s\n", myStr );

Si cela est trop sale, vous pouvez le faire (mais ce sera plus lent que de taper manuellement les 40 espaces): printf("%40s%s", "", myStr );

Si vous voulez que la chaîne soit alignée à la colonne 40 (c'est-à-dire, laissez jusqu'à 39 espaces le précédant de telle sorte que le caractère le plus à droite soit dans la colonne 40), procédez comme suit: printf("%40s", myStr);

Vous pouvez aussi mettre "jusqu'à" 40 espaces APRÈS la chaîne en faisant: printf("%-40s", myStr);

17
SoapBox