2009-02-10 8 views

risposta

69

questo farà il trucco:

#include <iostream> 
#include <iomanip> 

using namespace std; 
cout << setw(5) << setfill('0') << zipCode << endl; 

// or use this if you don't like 'using namespace std;' 
std::cout << std::setw(5) << std::setfill('0') << zipCode << std::endl; 

I manipolatori più comuni IO che controllano padding sono:

  • std::setw(width) set la larghezza di t lui campo.
  • std::setfill(fillchar) imposta il carattere di riempimento.
  • std::setiosflags(align) imposta l'allineamento, dove align è ios :: left o ios :: right.
+2

Nota che puoi anche usare 'cout << left' o' cout << right' per l'allineamento. –

7

Utilizzare i setw and setfill chiamate:

std::cout << std::setw(5) << std::setfill('0') << zipCode << std::endl; 
+0

Re-attivato e fatto +1 dal momento che mostra come farlo in qualsiasi spazio dei nomi (anche aggiunto setfill, sqook, spero che tu non m ind). – paxdiablo

+0

Abbastanza giusto. "using namespace std;" è decisamente malvagio. ;) –

+0

Penso che questa risposta dovrebbe ricordare che, diversamente dall'impostazione di 'std :: setw', l'impostazione di' std :: setfill' rimarrà attiva dopo l'output, in altre parole il carattere di riempimento per 'std :: cout' sarà cambiato in modo permanente (fino a quando non verrà modificato da un altro 'std :: setfill'). Dato che è improbabile che ciò sia desiderabile, sembrerebbe preferibile salvare e ripristinare il carattere di riempimento precedente. –

0

o,

char t[32]; 
sprintf_s(t, "%05d", 1); 

stamperà 00001 come OP già voluto fare

+3

L'OP ha chiesto esplicitamente un modo che usa l'operatore '<<' invece di (s) printf. – jankes

+0

@jankes che sarebbero: std :: cout << "Codice di avviamento postale:" << sprintf_s (t, "% 05d", 1) << endl; –