Drukowanie 0 ' s W C
Próbuję znaleźć dobry sposób na wydrukowanie wiodącego 0
, np. 01001
dla kodu pocztowego. Chociaż liczba byłaby przechowywana jako 1001
, Jaki jest dobry sposób, aby to zrobić?
Pomyślałem o użyciu instrukcji case
lub if
, aby dowiedzieć się, ile cyfr jest liczbą, a następnie przekonwertować ją na tablicę char
z dodatkowymi tablicami 0
do drukowania, ale nie mogę pomóc, ale myślę, że może być sposób, aby to zrobić ze składnią formatu printf
, która mi umyka.
11 answers
printf("%05d", zipCode);
0
wskazuje, co wypełniasz, a 5
pokazuje szerokość liczby całkowitej.
Przykład 1: jeśli użyjesz "%02d"
(użytecznego dla DAT), to będzie to tylko zer dla liczb w kolumnie one. Np. 06
zamiast 6
.
Przykład 2: "%03d"
wstawia 2 zera dla jednej liczby w kolumnie jedynek i 1 zero dla liczby w kolumnie dziesiątek. Np. numer 7 wyściełany do 007
i numer 17 wyściełany do 017
.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2021-01-11 20:40:47
Poprawnym rozwiązaniem jest przechowywanie kodu pocztowego w bazie danych jako ciąg znaków. Pomimo faktu, że może wyglądać jak liczba, nie jest. to kod, w którym każda część ma znaczenie.
Liczba to rzecz, na której robisz arytmetykę. Kod pocztowy to nie to.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2021-02-06 22:17:43
Umieszczasz zero przed minimalną szerokością pola:
printf("%05d", zipcode);
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2021-02-06 22:05:46
sprintf(mystring, "%05d", myInt);
Tutaj "05" mówi "użyj 5 cyfr z wiodącymi zerami".
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-08-09 07:54:50
Jeśli jesteś na maszynie * nix:
man 3 printf
Wyświetli stronę podręcznika, podobną do:
0 wartość powinna być zerowa. Dla d, I, o, U, x, X, a, A, e, Konwersje E, f, F, g i G, przeliczona wartość jest wyściełana na lewa z zerami, a nie spacjami. If the 0 and - flags oba są wyświetlane, znacznik 0 jest ignorowany. Jeśli podana jest dokładność przy konwersji numerycznej (d, I, o, U, x I X) znacznik 0 jest ignorowane. Dla innych konwersji zachowanie jest undefined.
Chociaż pytanie dotyczy C, ta strona może być pomocna.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2021-02-06 22:06:27
Kod pocztowy jest wysoce zlokalizowanym polem, a wiele krajów ma znaki w swoich kodach pocztowych, np. Dlatego w tym przykładzie powinieneś użyć pola string / varchar do przechowywania go, jeśli w dowolnym momencie będziesz wysyłał lub uzyskiwał użytkowników, klientów, klientów itp. z innych krajów.
Jednak w ogólnym przypadku należy użyć zalecanej odpowiedzi (printf("%05d", number);
).
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2021-02-06 22:18:20
printf umożliwia różne opcje formatowania.
Przykład:
printf("leading zeros %05d", 123);
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2021-02-06 22:05:27
Oszczędzisz sobie kłopotu (długoterminowego), jeśli przechowasz Kod Pocztowy jako ciąg znaków, którym jest, a nie numer, którym nie jest.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2021-02-06 22:21:24
Bardziej elastyczny.. Oto przykład drukowania wierszy z justowanymi liczbami o stałych szerokościach i odstępami.
//---- 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
Funkcja i makro są tak zaprojektowane, aby wydruki były bardziej czytelne.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-04-19 06:59:59
Jeśli chcesz zapisać kod pocztowy w tablicy znaków, zipcode[]
, możesz użyć tego:
snprintf(zipcode, 6, "%05.5d", atoi(zipcode));
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2021-02-06 22:19:13
Istnieją 2 sposoby wypisywania liczby z czołowymi zerami:
Użycie flagi 0
i określenia szerokości:
int zipcode = 123;
printf("%05d\n", zipcode); // outputs 00123
Użycie specyfikacji precyzji:
int zipcode = 123;
printf("%.5d\n", zipcode); // outputs 00123
Różnica między nimi polega na obsłudze liczb ujemnych:
printf("%05d\n", -123); // outputs -0123 (pad to 5 characters)
printf("%.5d\n", -123); // outputs -00123 (pad to 5 digits)
Kody pocztowe raczej nie będą negatywne, więc nie powinno to mieć znaczenia.
Należy jednak pamiętać, że kody pocztowe mogą faktycznie zawierać litery i myślniki, więc powinny być przechowywane jako ciągi znaków. Łącznie z czołowymi zerami w string jest prosty, więc rozwiązuje twój problem w znacznie prostszy sposób.
Zauważ, że w obu powyższych przykładach wartości 5
Szerokość lub precyzja mogą być podane jako argument int
:
int width = 5;
printf("%0*d\n", width, 123); // outputs 00123
printf("%.*d\n", width, 123); // outputs 00123
Jest jeszcze jedna sztuczka do poznania: precyzja 0
nie powoduje wyjścia dla wartości 0
:
printf("|%0d|%0d|\n", 0, 1); // outputs |0|1|
printf("|%.0d|%.0d|\n", 0, 1); // outputs ||1|
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2021-02-06 22:32:57