Führende Nullen in C drucken

Lesezeit: 5 Minuten

Benutzeravatar von zxcv
zxcv

Ich versuche, einen guten Weg zu finden, um führend zu drucken 0wie zum Beispiel 01001 Für ein Postleitzahl. Dabei würde die Nummer als gespeichert werden 1001was ist ein guter Weg, es zu tun?

Ich dachte daran, beides zu verwenden case Aussagen bzw if um herauszufinden, wie viele Ziffern die Zahl hat, und sie dann in eine umzuwandeln char Array mit zusätzlichen 0‘s zum Drucken, aber ich kann nicht anders, als zu glauben, dass es eine Möglichkeit geben könnte, dies mit dem zu tun printf Formatsyntax, die mir entgeht.

  • was ist mit diesem stackoverflow.com/questions/530614/…

    – AP

    19. März um 20:25 Uhr

  • @AviPars: Sie schlagen eine C++-Lösung vor: std::cout << std::setw(5) << std::setfill('0') << zipCode << std::endl; Dies ist eine typsichere, aber stark überarbeitete Alternative zu printf("%05\n", (int)zipCode);

    – chqrlie

    19. März um 22:01 Uhr


  • Nein, ich schlug vor, es manuell mit dem ASCII-Zeichen ‘0’ und einer bedingten Anweisung zu tun

    – AP

    20. März um 10:17 Uhr

  • @AviPars: Entschuldigung, ich habe den Link falsch gelesen. Dieser manuelle Ansatz ist für eine zweistellige Nummer in Ordnung, aber für eine fünfstellige Postleitzahl erfordert die Handhabung aller Möglichkeiten mehr Code, es sei denn, Sie können davon ausgehen, dass es sich bei der Postleitzahl um eine gültige US-Postleitzahl handelt, die bei beginnt 01001

    – chqrlie

    20. März um 10:30 Uhr

  • @chqrlie, deshalb habe ich es nicht als Antwort eingereicht – aber es ist schön, wenn die Leute wissen, dass es verschiedene Möglichkeiten gibt, mit Problemen umzugehen, die alle gültig sind

    – AP

    20. März um 10:41 Uhr

Benutzeravatar von EvilTeach
Böses Lehren

printf("%05d", zipCode);

Das 0 zeigt an, womit Sie auffüllen und die 5 zeigt die Breite der ganzen Zahl.

Beispiel 1: Wenn Sie verwenden "%02d" (nützlich für Datumsangaben) würde dies nur Nullen für Zahlen in der Einerspalte auffüllen. Z.B, 06 Anstatt von 6.

Beispiel 2: "%03d" würde 2 Nullen für eine Zahl in der Einerspalte und 1 Null für eine Zahl in der Zehnerspalte auffüllen. ZB Nummer 7 aufgefüllt 007 und Nummer 17 aufgefüllt 017.

  • Bitte speichern Sie Postleitzahlen nicht als Zahlen. Einige Länder haben Buchstaben in ihrer Postleitzahl.

    – Sek

    30. September 2008 um 16:57 Uhr

  • Für deinen Fall würde das reichen. Wie kann man führende Nullen in einer ganzen Zahl unbekannter Länge haben?

    – Dominic Motuka

    10. Mai 2018 um 14:58 Uhr

  • Sie müssen die maximale Länge der letzten aufgefüllten Zeichenfolge kennen. Alternativ, wenn Sie immer 5 führende Nullen wollten, dann “00000” + integer.to_s. etc

    – Mambie

    4. März 2020 um 5:21 Uhr

Benutzeravatar von James Curran
James Curran

Die richtige Lösung besteht darin, die Postleitzahl in der Datenbank als STRING zu speichern. Auch wenn es wie eine Zahl aussieht, ist es keine. Es ist ein Code, bei dem jeder Teil eine Bedeutung hat.

Eine Zahl ist ein Gegenstand, mit dem Sie rechnen. Eine Postleitzahl ist das nicht.

  • Ja. Deine Beobachtung ist absolut richtig. Das ist was ich mache. Die Person, die die Frage stellt, versucht jedoch wahrscheinlich, sich mit Hausaufgaben anstatt mit Produktionscode zu befassen. Die Antwort muss auf die Person zugeschnitten sein, die die Frage stellt.

    – EvilTeach

    30. September 2008 um 17:32 Uhr

  • Ich nehme an, ich hätte es genauer umformulieren sollen, um zu veranschaulichen, dass ich sehen wollte, wie ich führende und nachgestellte Zeichen in einer Sprache ausführen kann, mit der ich nicht vertraut war. Mit willkürlichen Beispielen werde ich in Zukunft vorsichtiger sein!

    – zxcv

    30. September 2008 um 23:31 Uhr

  • Andere Länder, wie Großbritannien, haben Buchstaben in Postleitzahlen

    – jjxtra

    6. September 2016 um 21:21 Uhr

Benutzeravatar von Adam Bellaire
Adam Bellaire

Sie setzen eine Null vor die minimale Feldbreite:

printf("%05d", zipcode);

Benutzeravatar von Dan Hewett
Dan Hewett

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

Hier sagt „05“ „fünf Ziffern mit führenden Nullen verwenden“.

Benutzeravatar von Paul Tomblin
Paul Tomblin

Wenn Sie sich auf einer *nix-Maschine befinden:

man 3 printf

Dies zeigt eine Handbuchseite, ähnlich wie:

0 Der Wert sollte mit Nullen aufgefüllt werden. Bei d-, i-, o-, u-, x-, X-, a-, A-, e-, E-, f-, F-, g- und G-Konvertierungen wird der konvertierte Wert links mit Nullen statt mit Leerzeichen aufgefüllt. Wenn die 0- und –Flags beide erscheinen, wird die 0-Flagge ignoriert. Wenn eine Genauigkeit mit einer numerischen Konvertierung (d, i, o, u, x und X) angegeben wird, wird das 0-Flag ignoriert. Bei anderen Konvertierungen ist das Verhalten nicht definiert.

Obwohl die Frage für C ist, Dies Seite kann hilfreich sein.

  • Warum wird die 3-Nummer benötigt?

    – eri0o

    25. Februar 2018 um 14:47 Uhr

  • @Elric Wenn Sie dem ein numerisches Argument geben man Befehl, wird es auf diesen bestimmten Abschnitt eingegrenzt. Ohne es erhalten Sie die Manpage für den Shell-Befehl printf Anstelle der C-Funktion.

    – Paul Tomblin

    25. Februar 2018 um 16:51 Uhr

Benutzeravatar von Peter Mortensen
Peter Mortensen

Postleitzahl ist ein stark lokalisiertes Feld, und viele Länder haben Zeichen in ihren Postleitzahlen, z. B. Großbritannien, Kanada. Daher sollten Sie in diesem Beispiel ein String-/Varchar-Feld verwenden, um es zu speichern, wenn Sie zu irgendeinem Zeitpunkt Benutzer, Kunden, Kunden usw. aus anderen Ländern versenden oder erhalten würden.

Im allgemeinen Fall sollten Sie jedoch die empfohlene Antwort verwenden (printf("%05d", number);).

  • Warum wird die 3-Nummer benötigt?

    – eri0o

    25. Februar 2018 um 14:47 Uhr

  • @Elric Wenn Sie dem ein numerisches Argument geben man Befehl, wird es auf diesen bestimmten Abschnitt eingegrenzt. Ohne es erhalten Sie die Manpage für den Shell-Befehl printf Anstelle der C-Funktion.

    – Paul Tomblin

    25. Februar 2018 um 16:51 Uhr

Benutzeravatar von Peter Mortensen
Peter Mortensen

Es gibt zwei Möglichkeiten, Ihre Nummer mit führenden Nullen auszugeben:

Verwendung der 0 Flag und der Breitenbezeichner:

int zipcode = 123;
printf("%05d\n", zipcode);  // Outputs 00123

Verwenden des Genauigkeitsbezeichners:

int zipcode = 123;
printf("%.5d\n", zipcode);  // Outputs 00123

Der Unterschied zwischen diesen ist der Umgang mit negativen Zahlen:

printf("%05d\n", -123);  // Outputs -0123 (pad to 5 characters)
printf("%.5d\n", -123);  // Outputs -00123 (pad to 5 digits)

Es ist unwahrscheinlich, dass Postleitzahlen negativ sind, daher sollte es keine Rolle spielen.

Beachten Sie jedoch, dass Postleitzahlen tatsächlich Buchstaben und Bindestriche enthalten können und daher als Zeichenfolgen gespeichert werden sollten. Das Einfügen der führenden Nullen in die Zeichenfolge ist unkompliziert, sodass Ihr Problem auf viel einfachere Weise gelöst wird.

Beachten Sie, dass in beiden obigen Beispielen die 5 Breiten- oder Genauigkeitswerte können als an angegeben werden int Streit:

int width = 5;
printf("%0*d\n", width, 123);  // Outputs 00123
printf("%.*d\n", width, 123);  // Outputs 00123

Es gibt noch einen weiteren Trick zu kennen: eine Genauigkeit von 0 bewirkt keine Ausgabe für den Wert 0:

printf("|%0d|%0d|\n", 0, 1);   // Outputs |0|1|
printf("|%.0d|%.0d|\n", 0, 1); // Outputs ||1|

1427630cookie-checkFührende Nullen in C drucken

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy