Imprimer les 0 premiers en C?

J’essaie de trouver un bon moyen d’imprimer les principaux 0, tels que 01001 pour un code postal. Alors que le numéro serait stocké sous la forme 1001, quel est le bon moyen de le faire?

J’ai pensé à utiliser les deux instructions case / if pour déterminer le nombre de chiffres puis le convertir en un tableau avec des 0 supplémentaires pour l’impression, mais je ne peux m’empêcher de penser qu’il y a un moyen de le faire avec le La syntaxe du format printf qui m’échappe.

printf("%05d", zipCode); 

La solution correcte consiste à stocker le code postal dans la firebase database en tant que STRING. Bien que cela puisse sembler être un chiffre, ce n’est pas le cas. C’est un code, où chaque partie a un sens.

Un nombre est une chose sur laquelle vous faites des calculs. Un code postal n’est pas ça.

Vous placez un zéro avant la largeur du champ minimum:

 printf("%05d",zipcode); 

Code postal est un domaine très localisé, de nombreux pays ont des caractères dans leurs codes postaux, par exemple, Royaume-Uni, Canada. Par conséquent, dans cet exemple, vous devez utiliser un champ ssortingng / varchar pour le stocker si, à tout moment, vous envoyez ou recevez des utilisateurs / clients / clients / etc. d’autres pays.

Cependant, dans le cas général, vous devez utiliser la réponse recommandée ( printf("%05d", number); ).

Si vous êtes sur une machine * NIX:

 man 3 printf 

Cela montrera une page de manuel, similaire à:

0 La valeur doit être zéro. Pour les conversions d, i, o, u, x, X, a, A, e, E, f, F, g et G, la valeur convertie est complétée par des zéros plutôt que des blancs. Si les indicateurs 0 et – apparaissent tous les deux, l’indicateur 0 est ignoré. Si une précision est donnée avec une conversion numérique (d, i, o, u, x et X), l’indicateur 0 est ignoré. Pour les autres conversions, le comportement est indéfini.

Même si la question est pour C, cette page peut être utile.

 sprintf(myssortingng, "%05d", myInt); 

Ici, “05” indique “utiliser 5 chiffres avec des zéros en tête”.

printf permet diverses options de formatage.

ex:

 printf("leading zeros %05d", 123); 

Vous vous épargnerez beaucoup de problèmes (à long terme) si vous stockez un code postal sous la forme d’une chaîne de caractères, ce qui est le cas, plutôt qu’un nombre, ce qui n’est pas le cas.

Plus flexible. Voici un exemple d’impression de lignes avec des nombres justifiés à droite avec des largeurs fixes et un espace-remplissage.

 //---- Header std::ssortingng getFmt ( int wid, long val ) { char buf[64]; sprintf ( buf, "% *ld", wid, val ); return buf; } #define FMT (getFmt(8,x).c_str()) //---- Put to use printf ( " COUNT USED FREE\n" ); printf ( "A: %s %s %s\n", FMT(C[0]), FMT(U[0]), FMT(F[0]) ); printf ( "B: %s %s %s\n", FMT(C[1]), FMT(U[1]), FMT(F[1]) ); printf ( "C: %s %s %s\n", FMT(C[2]), FMT(U[2]), FMT(F[2]) ); //-------- Output COUNT USED FREE A: 354 148523 3283 B: 54138259 12392759 200391 C: 91239 3281 61423 

La fonction et la macro sont conçues pour que les printfs soient plus lisibles.

Si vous avez besoin de stocker le code postal dans un code postal de tableau de caractères [], vous pouvez utiliser ceci:

 snprintf( zipcode, 6, "%05.5d", atoi(zipcode));