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.

Était-ce utile?

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));
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top