41 votes

remplissage avec sprintf

J'ai une question factice. Je voudrais imprimer un entier dans un tampon de remplissage avec 0 mais je ne peux pas le trier au format sprintf j'essaye ce qui suit

 char buf[31];
int my_val = 324;
sprintf( buf, "%d030", my_val );

en espérant avoir la chaîne suivante

 "000000000000000000000000000324"

Qu'est-ce que je fais mal? Cela ne signifie-t-il pas un remplissage avec 0 pour une largeur maximale de 30 caractères ?

84voto

Seth Robertson Points 13276

"%030d" est le droïde que vous recherchez

11voto

Sreerac Points 111

Vous vous trompez légèrement dans la syntaxe ; Le code suivant produit la sortie souhaitée :

 char buf[31];
int my_val = 324;
sprintf( buf, "%030d", (int)my_val );

Extrait de l'article de Wikipédia sur Printf :

 [...] printf("%2d", 3) results in " 3", while printf("%02d", 3) results in "03".

7voto

Nick Meyer Points 14502

Le remplissage et la largeur viennent avant le spécificateur de type :

 sprintf( buf, "%030d", my_val );

5voto

Matthew Points 25748

Essayer:

 sprintf( buf, "%030d", my_val );

3voto

jbruni Points 961

Vos paramètres de précision et de largeur doivent être compris entre le « % » et le spécificateur de conversion « d », pas après. En fait, tous les drapeaux le font. Donc, si vous voulez un '+' pour les nombres positifs, utilisez '%+d'.

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