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.

War es hilfreich?

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));
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top