Question
J'essaie de trouver un bon moyen d'imprimer les 0 premiers, tels que 01001 pour un code postal. Alors que le nombre serait stocké comme 1001, quel est le bon moyen de le faire?
J'ai pensé utiliser l'un ou l'autre cas / if pour déterminer le nombre de chiffres puis le convertir en tableau de caractères avec des chiffres supplémentaires pour l'impression, mais je ne peux m'empêcher de penser qu'il peut y avoir un moyen de le faire. ceci avec la syntaxe de format printf qui m'échappe.
La solution
printf("%05d", zipCode);
Autres conseils
La bonne solution consiste à stocker le code postal dans la base de données en tant que chaîne. Malgré le fait que cela puisse ressembler à un chiffre, ce n'est pas le cas. C'est un code, où chaque partie a une signification.
Un nombre est une chose sur laquelle vous faites de l'arithmétique. Un code postal n’est pas ça.
Vous placez un zéro avant la largeur minimale du champ:
printf("%05d",zipcode);
Le code postal est un champ 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 string / varchar pour le stocker si, à un moment quelconque, vous expédiez ou récupérez des utilisateurs / clients / clients / etc. d'autres pays.
Toutefois, dans le cas général, vous devez utiliser la réponse recommandée ( printf ("% 05d", nombre);
).
Si vous êtes sur une machine * NIX:
man 3 printf
Ceci affichera une page de manuel, semblable à:
0 La valeur doit être remplie à zéro. Pour d, i, o, u, x, x, a, a, e, Conversions E, f, F, g et G, la valeur convertie est complétée sur la gauche avec des zéros plutôt que des blancs. Si les drapeaux 0 et - les deux apparaissent, l'indicateur 0 est ignoré. Si une précision est donnée avec une conversion numérique (d, i, o, u, x et X), le drapeau 0 est ignoré. Pour les autres conversions, le comportement n'est pas défini.
Même si la question concerne le C, la cette page peut être utile.
sprintf(mystring, "%05d", myInt);
Ici, " 05 " dit "utilisez 5 chiffres avec des zéros".
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 plutôt qu'un nombre, ce qui n'est pas le cas.
Plus flexible .. Voici un exemple d’impression de rangées de nombres justifiés à droite de largeur fixe et de remplissage d’espace.
//---- Header
std::string 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 devez stocker le code postal dans un tableau de caractères code postal [], vous pouvez utiliser ceci:
snprintf( zipcode, 6, "%05.5d", atoi(zipcode));