Bonjour,
Je cherche a écrire une chaîne avec un printf aligné à droite et un caractère de remplissage de mon choix.
printf("%*s\n",15,"toto");
toto
Je voudrais remplacer les espaces par un caractère de mon choix.
printf("%'c*s\n",'.',15,"toto");
...........toto
Je l’ai fait avec des boucles, mais il me semblait que c’était possible… ai-je tort ?
# C
Posté par Tonton Benoit . Évalué à 3. Dernière modification le 04 mai 2016 à 02:13.
Dans d'autres langages y'a du sucre pour faire ça, mais en C il va falloir se contenter d’édulcorants.
C'est pas prévu par printf, mais y'a des solutions sans boucle, genre:
[^] # Re: C
Posté par Anthony Jaguenaud . Évalué à 2.
Du coup ma solution ressemblerait plus à :
Merci :
[^] # Re: C
Posté par plr . Évalué à 1.
La performance est-elle critique?
Par exemple, on peut aussi utiliser un sprintf avec comme pointeur de départ la taille de la ligne moins la taille de la chaine de caractère.
Sachant que dans tous le cas où il y a plusieurs lignes à afficher, la ligne est réinitialisée avec le caractère de padding. De là, on peut penser à optimiser en ne réinitialisant le padding que pour les caractères modifiés précédemment, voir en concaténant les caractères de padding en une donnée dont le type est optimisé pour la machine, mais là je m'emporte…
Il faudrait voir la performance pour chaque algorithme.
[^] # Re: C
Posté par slack . Évalué à 1.
Merci pour cette méthode. Débutant en C et autodidacte, je ne connaissais pas l'utilisation de l'étoile pour passer un paramètre dans le format de printf.
Personnellement, j'écrirais :
Qu'en pensez-vous ?
[^] # Re: C
Posté par Anthony Jaguenaud . Évalué à 2.
Je n’aime pas l’utilisation d’une macro pour plusieurs paramètres.
Même si c’est pas mal, on ne comprend pas tout de suite où sont les paramètres manquants, pire, si tu veux faire de la traduction et utiliser la syntaxe permettant de prendre le deuxième paramètre, puis le premier… tu risques d’avoir du mal à compter correctement.
Le C permet de faire des choses sympas, de manière souple, mais il ne faut pas oublier la relecture par un futur collègue, ou même par toi même quand tu reviens quelques mois plus tard. Si tu passes un quart d’heure à re-comprendre alors que tu l’aurais écrit en 5 minutes de plus (je suis large), tu perds du temps globalement.
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.