Pregunta

Estoy tratando de encontrar una buena manera de imprimir los primeros 0, como 01001 para un código postal. Si bien el número se almacenaría como 1001, ¿cuál es una buena manera de hacerlo?

Pensé en usar cualquiera de las declaraciones de caso / si entonces para averiguar cuántos dígitos es el número y luego convertirlo en una matriz de caracteres con 0 adicionales para imprimir, pero no puedo evitar pensar que puede haber una manera de hacerlo esto con la sintaxis del formato printf que me está eludiendo.

¿Fue útil?

Solución

printf("%05d", zipCode);

Otros consejos

La solución correcta es almacenar el código postal en la base de datos como una CADENA. A pesar de que puede parecer un número, no lo es. Es un código, donde cada parte tiene un significado.

Un número es una cosa en la que haces aritmética. Un código postal no es eso.

Coloca un cero antes del ancho de campo mínimo:

printf("%05d",zipcode);

El código postal es un campo altamente localizado, muchos países tienen caracteres en sus códigos postales, por ejemplo, Reino Unido, Canadá. Por lo tanto, en este ejemplo, debe usar un campo string / varchar para almacenarlo si en algún momento enviaría o conseguiría usuarios / clientes / clientes / etc de otros países.

Sin embargo, en el caso general, debe usar la respuesta recomendada ( printf ("% 05d " ;, número); ).

Si estás en una máquina * NIX:

man 3 printf

Esto mostrará una página de manual, similar a:

  

0 El valor debe estar rellenado con cero. Para d, i, o, u, x, X, a, A, e,                 Conversiones E, f, F, g y G, el valor convertido se rellena en                 la izquierda con ceros en lugar de espacios en blanco. Si las banderas 0 y -                 ambos aparecen, la bandera 0 se ignora. Si se da una precisión.                 con una conversión numérica (d, i, o, u, xy X), el indicador 0 es                 ignorado Para otras conversiones, el comportamiento no está definido.

Aunque la pregunta es para C, esta página puede ser de ayuda.

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

Aquí, " 05 " dice "usar 5 dígitos con ceros a la izquierda" #

printf permite varias opciones de formato.

ej:

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

Te ahorrarás un montón de problemas (a largo plazo) si almacenas un código postal como una cadena de caracteres, que es, en lugar de un número, que no es.

Más flexible .. Aquí hay un ejemplo de impresión de filas de números justificados a la derecha con anchos fijos y espacio de relleno.

//---- 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 función y la macro están diseñadas para que las impresoras sean más legibles.

Si necesita almacenar el código postal en un código postal de matriz de caracteres [], puede usar esto:

snprintf( zipcode, 6, "%05.5d", atoi(zipcode));
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top