Pergunta

Eu estou tentando encontrar uma boa maneira para imprimir líder 0, tais como 01001 para um CEP. Enquanto o número seria armazenado como 1001, o que é uma boa maneira de fazê-lo?

Pensei em usar tanto as declarações de caso / se, em seguida, para descobrir quantos dígitos o número é e, em seguida, convertê-lo em uma matriz de char com extras 0 do para a impressão, mas eu não posso ajudar, mas acho que pode haver uma maneira de fazer isso com a sintaxe formato printf que está me iludindo.

Foi útil?

Solução

printf("%05d", zipCode);

Outras dicas

A solução correta é para armazenar o código postal no banco de dados como uma string. Apesar do fato de que ele pode ser parecido com um número, não é. É um código, onde cada parte tem sentido.

Um número é uma coisa que você faz aritmética. Um código postal não é isso.

Você coloca um zero antes de a largura do campo mínimo:

printf("%05d",zipcode);

Cep é um campo altamente localizada, muitos países têm caracteres em seus códigos postais, por exemplo, Reino Unido, Canadá. Portanto, neste exemplo, você deve usar um campo de cadeia / varchar para armazená-lo, se em algum momento você seria o transporte ou se os usuários / clientes / clientes / etc de outros países.

No entanto, no caso geral, você deve usar a resposta recomendada (printf("%05d", number);).

Se você estiver em um * NIX máquina:

man 3 printf

Isto irá mostrar uma página de manual, semelhante a:

0 O valor deve ser zero acolchoada. Para d, i, o, u, X, X, A, A, E, E, F, F, G, G e conversões, o valor convertido é estampado sobre a esquerda com zeros em vez de espaços em branco. Se os 0 e - bandeiras ambos aparecem, o sinalizador 0 será ignorado. Se uma precisão é dada com uma conversão numérica (d, i, o, u, X, e X), a 0 pavilhão é ignorados. Para outras conversões, o comportamento é indefinido.

Mesmo que a pergunta é para C, desta página podem ser de ajuda.

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

Aqui, "05", diz o "uso 5 dígitos com zeros à esquerda".

printf permite várias opções de formatação.

ex:

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

Você vai salvar um monte de problemas (longo prazo) se você armazenar um código postal como uma cadeia de caracteres, que é, em vez de um número, que não é.

Mais flexível .. Aqui está um exemplo de imprimir linhas de números direito-justificados com larguras fixas, e espaço-preenchimento.

//---- 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

A função e macro são projetados de modo que os printfs são mais legíveis.

Se você precisa armazenar o CEP em um CEP array de caracteres [], você pode usar isto:

snprintf( zipcode, 6, "%05.5d", atoi(zipcode));
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top