Remplacer %40 par une variable dans printf

Bonjour,
Si j'écris,

printf("%40s", " ");

comme résultat j'ai 40 espaces puis la chaine.
comment faire pour mettre dans une variable le chiffre 40 ?
j'aimerais avoir un truc du genre,

printf("%" + var + "s", " "); // var serais egal à 40 ou 20 ou 35 etc..

je ne sais pas si c'est possible.
Merci.

Oui c'est bien ce que tu demande.

%s c'est pour insérer une chaine de caractére.
Si tu veux insérer un entier, il faut utiliser le "specifier" correspondant, normalement c'est %d pour un entier, mais je ne suis pas sûre que le portage sur Arduino, utilise le même "specifier".
Quel librairie utilise tu?
N'y a t'il pas une documentation fournie?

c'est la librairie standard du langages C, ca peut être Serial.printf ou le C microchip ou AVR ou eSP32 ou pico etc ...

En fait je veux faire varier la constante de printf et non afficher un entier.
au lieu de "%40s", je veux faire varier le chiffre 40.

je veux afficher un certain nombre d'espace, évidemment en C pure, pas de string aucune librairie etc ..

j'aurais pu utiliser une boucle mais je préfère éviter avec le printf qui est lourd en plus de la boucle.

for (int i = 0; i < 40; i++)
   printf(" ");

Certes, mais il doit y avoir une documentation fournis avec ?
Par contre je n'ai pas vu de fonction printf dans la librairie Serial fournis en standard.
Pour chacune des librairies que tu cites, il y a une implémentation spécifique et donc plus ou moins de chose de supporter.
C'est pour çà que quelque soit la librairie que tu veux utiliser, il faudra te référer à la documentation, si il y en a une.

ok, tu veux donc faire varier le nombre d'espace en foncions d'une variable ?
Donc comme je ne sais pas(enfin veux pas :slight_smile: ), j'utiliserais plutôt snprintf pour construire un format qui fait ce que je veux %40s
du coup il faudra doubler le %, pour qu'il ne soit pas pris comme caractère de début de format, puis je remplacerais 40 par un %d pour remplacer par le contenue de ta variable.
Du coup c'est chaine pourra être utiliser par ton printf pour faire ton %40s final, avec 40 qui vaudra le contenu de ta variable.
Je ne peux pas tester et je n'ai pas accés à la documentation de la librairie que tu utilise, donc je ne garantit pas que ça marche :slight_smile:

c'est ce que j'avais fait après mais je pensait qu'il y avait une solution plus simple, plus optimisé avec les sprintf, printf. tant pis je laisserai comme cela.
Merci.

essayez

const char * texte = "coucou";

void setup() {
  Serial.begin(115200);
  for (int i = 0; i < 20; i++)
    printf("%*s\n", i+strlen(texte), texte); // l'étoile donne la taille minimum du champ sinon padding
}

void loop() {}

Merci, je testerai cela.

Et pourquoi pas mette le format dans une variable ?

int nombre_de_blancs = 40;
char fmt[10];
sprint ( fmt, "%%%ds", nombre_de_blancs );
printf ( fmt,  " " );

c'est ce que proposait @terwal mais pourquoi faire cela alors que la fonction printf() accepte déjà l'étoile dans le format ?

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.