Domanda

Sto cercando di trovare un buon modo per stampare i primi 0, come 01001 per un codice postale. Mentre il numero verrebbe memorizzato come 1001, qual è un buon modo per farlo?

Ho pensato di usare entrambe le dichiarazioni case / if per capire quante cifre è il numero e quindi convertirlo in un array di caratteri con 0 aggiuntivi per la stampa, ma non posso fare a meno di pensare che potrebbe esserci un modo per farlo questo con la sintassi del formato printf che mi sfugge.

È stato utile?

Soluzione

printf("%05d", zipCode);

Altri suggerimenti

La soluzione corretta è archiviare il codice postale nel database come STRING. Nonostante possa sembrare un numero, non lo è. È un codice, in cui ogni parte ha un significato.

Un numero è una cosa su cui fai l'aritmetica. Un codice postale non è quello.

Metti uno zero prima della larghezza minima del campo:

printf("%05d",zipcode);

Il codice postale è un campo altamente localizzato, molti paesi hanno caratteri nei loro codici postali, ad esempio Regno Unito, Canada. Pertanto, in questo esempio, è necessario utilizzare un campo stringa / varchar per memorizzarlo se in qualsiasi momento si spedire o ottenere utenti / clienti / clienti / ecc. Da altri paesi.

Tuttavia, nel caso generale, è necessario utilizzare la risposta consigliata ( printf ("% 05d " ;, numero); ).

Se sei su un * NIX Machine:

man 3 printf

Questo mostrerà una pagina di manuale, simile a:

  

0 Il valore deve essere zero imbottito. Per d, i, o, u, x, X, a, A, e,                 Conversioni E, f, F, ge G, il valore convertito viene riempito                 la sinistra con zeri anziché spazi vuoti. Se i flag 0 e -                 entrambi appaiono, il flag 0 viene ignorato. Se viene data una precisione                 con una conversione numerica (d, i, o, u, xe X), il flag 0 è                 ignorato. Per altre conversioni, il comportamento non è definito.

Anche se la domanda è per C, questa pagina può essere di aiuto.

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

Qui, " 05 " dice "utilizzare 5 cifre con zeri iniziali".

printf consente varie opzioni di formattazione.

es:

printf("leading zeros %05d", 123);

Ti risparmierai un mucchio di problemi (a lungo termine) se memorizzi un codice postale come stringa di caratteri, che è, piuttosto che un numero, che non lo è.

Più flessibile .. Ecco un esempio di stampa di righe di numeri giustificati a destra con larghezze fisse e spaziatura.

//---- 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 funzione e la macro sono progettate in modo che i file di stampa siano più leggibili.

Se è necessario memorizzare il codice postale in un codice postale dell'array di caratteri [], è possibile utilizzare questo:

snprintf( zipcode, 6, "%05.5d", atoi(zipcode));
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top