Frage
Ich versuche, einen guten Weg zu finden, 0en zu drucken führt, wie zum Beispiel 01001 für eine zipcode. Während die Zahl würde als 1001 gespeichert werden, was ein guter Weg, es zu tun?
ich daran gedacht, mit entweder case-Anweisungen / wenn dann, um herauszufinden, wie viele Stellen die Zahl ist, und es dann mit zusätzlichen 0'en für den Druck auf einen char-Array umwandeln, aber ich kann nicht helfen, denken, aber es eine Möglichkeit sein kann, zu tun dies mit der printf-Format-Syntax, die mich eluding.
Lösung
printf("%05d", zipCode);
Andere Tipps
Die richtige Lösung ist die Postleitzahl in der Datenbank als STRING zu speichern. Trotz der Tatsache, dass es wie eine Zahl aussieht, ist es nicht. Es ist ein Code, wobei jeder Teil Bedeutung hat.
Eine Zahl ist eine Sache, die Sie auf Arithmetik zu tun. Eine Postleitzahl ist das nicht.
Sie legen eine Null vor der minimalen Feldbreite:
printf("%05d",zipcode);
PLZ ist ein stark lokalisierten Bereich, haben viele Länder Zeichen in ihren Postleitzahlen, zum Beispiel in Großbritannien, Kanada. Daher wird in diesem Beispiel sollten Sie eine Zeichenfolge / varchar Feld verwenden, es zu speichern, wenn an irgendeiner Stelle seien Sie versandt oder erhalten Nutzer / Kunden / Klienten / etc aus anderen Ländern.
Jedoch im allgemeinen Fall sollten Sie die empfohlene Antwort verwenden (printf("%05d", number);
).
Wenn Sie auf einer * NIX-Maschine sind:
man 3 printf
Dies zeigt eine manuelle Seite, ähnlich wie:
0 Der Wert soll mit Nullen aufgefüllt werden. Für d, i, o, u, x, X, a, a, e, E, F, F, G und G Konvertierungen wird der umgewandelte Wert aufgeklotzt die linke Seite mit Nullen statt Leerzeichen. Wenn die 0 und - Fahnen beide erscheinen, wird der 0-Flag ignoriert. Wenn eine Genauigkeit gegeben mit einer numerischen Umwandlung (d, i, o, u, x, und X) ist der 0-Flag ignoriert. Für andere Umwandlungen, ist das Verhalten nicht definiert.
Auch wenn die Frage für C ist, diese Seite der Hilfe sein kann.
sprintf(mystring, "%05d", myInt);
Hier "05", sagt "verwenden 5-stellig mit führenden Nullen".
printf können verschiedene Formatierungsoptionen.
ex:
printf("leading zeros %05d", 123);
Sie sparen Sie sich einen Haufen Ärger (langfristig), wenn Sie eine Postleitzahl als Zeichenfolge speichern, die sie ist, sondern als eine Zahl, die es nicht ist.
Flexiblere .. Hier ist ein Beispiel Druckzeilen rechtsbündig Zahlen mit festen Breiten und platz Polsterung.
//---- 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
Die Funktion und Makro sind so konzipiert, die printfs mehr lesbar sind.
Wenn Sie die Postleitzahl in einem Zeichenfeld zipcode [] speichern müssen, können Sie diese verwenden:
snprintf( zipcode, 6, "%05.5d", atoi(zipcode));