92 votes

Comment répéter un caractère en utilisant printf ?

J'aimerais faire quelque chose comme printf("?", count, char) pour répéter un caractère count temps.

Quelle est la bonne chaîne de format pour y parvenir ?

EDIT : Oui, il est évident que je pourrais appeler printf() dans une boucle, mais c'est justement ce que je voulais éviter.

131voto

rep_movsd Points 2526

Vous pouvez utiliser la technique suivante :

printf("%.*s", 5, "=================");

Ceci imprimera "=====" Cela fonctionne pour moi sur Visual Studio, il n'y a aucune raison pour que cela ne fonctionne pas sur tous les compilateurs C.

69voto

synthesizerpatel Points 9762

Réponse courte - oui, réponse longue : pas comme vous le souhaitez.

Vous pouvez utiliser la forme %* de printf qui accepte une largeur variable. Et, si vous utilisez '0' comme valeur à imprimer, combiné avec le texte aligné à droite qui a un remplissage zéro à gauche

printf("%0*d\n", 20, 0);

produit :

00000000000000000000

Avec ma langue fermement plantée dans ma joue, je vous offre ce petit bout de code de spectacle d'horreur.

Parfois, tu dois juste faire des choses mal pour te rappeler pourquoi tu fais tant d'efforts le reste du temps.

#include <stdio.h>

int width = 20;
char buf[4096];

void subst(char *s, char from, char to) {
    while (*s == from)
    *s++ = to;
}

int main() {
    sprintf(buf, "%0*d", width, 0);
    subst(buf, '0', '-');
    printf("%s\n", buf);
    return 0;
}

32voto

Ariel Points 12944

Si vous vous limitez à répéter un 0 ou un espace, vous pouvez le faire :

Pour les espaces :

printf("%*s", count, "");

Pour les zéros :

printf("%0*d", count, 0);

20voto

En c++, vous pouvez utiliser std::string pour obtenir les caractères répétés.

printf("%s",std::string(count,char).c_str());

Par exemple :

printf("%s",std::string(5,'a').c_str());

sortie :

aaaaa

15voto

Mats Petersson Points 70074

Il n'y a rien de tel. Vous devrez soit écrire une boucle en utilisant printf ou puts ou écrire une fonction qui copie la chaîne de caractères le nombre de fois dans une nouvelle chaîne.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X