Imprimiendo los 0’s principales en C?

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á como 1001, ¿cuál es una buena manera de hacerlo?

Pensé en usar cualquiera de los enunciados de caso / si entonces para averiguar cuántos dígitos tiene el número y luego convertirlo en un arreglo de caracteres con 0 extra para imprimir, pero no puedo evitar pensar que puede haber una manera de hacerlo con el La syntax del formato printf me está eludiendo.

printf("%05d", zipCode); 

La solución correcta es almacenar el código postal en la base de datos como STRING. 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 algo sobre lo que se puede hacer una aritmética. Un código postal no es eso.

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

 printf("%05d",zipcode); 

Código postal es un campo muy 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 de cadena / varchar para almacenarlo si en algún momento estaría enviando u obteniendo usuarios / clientes / clientes / etc. de otros países.

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

Si está en una * máquina NIX:

 man 3 printf 

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

0 El valor debe ser cero acolchado. Para las conversiones d, i, o, u, x, X, a, A, e, E, f, F, gy G, el valor convertido se rellena a la izquierda con ceros en lugar de espacios en blanco. Si aparecen los indicadores 0 y -, se ignora el indicador 0. Si se proporciona una precisión con una conversión numérica (d, i, o, u, x y X), se ignora el indicador 0. 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 “use 5 dígitos con ceros a la izquierda”.

printf permite varias opciones de formateo.

ex:

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

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

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

 //---- 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 el macro están diseñados para que los printfs 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));