2009-02-10 15 views
44

Wie kann ich meine Ausgabe in C++ formatieren? Mit anderen Worten, was ist das C++ entspricht der Verwendung von printf wie folgt aus:Führende Nullen mit C++ - Ausgabeoperator drucken (Printf-Äquivalent)?

printf("%05d", zipCode); 

Ich weiß, dass ich nur printf in C++ verwenden könnte, aber ich würde den Ausgabeoperator << bevorzugen.

Würden Sie einfach folgendes verwenden?

std::cout << "ZIP code: " << sprintf("%05d", zipCode) << std::endl; 

Antwort

69

Dieser den Trick tun:

#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; 

Die häufigsten Manipulatoren IO, die Polsterung steuern sind:

  • std::setw(width) Sets die Breite von t er Feld.
  • std::setfill(fillchar) legt das Füllzeichen fest.
  • std::setiosflags(align) legt die Ausrichtung fest, wobei align ios :: left oder ios :: right ist.
+2

Beachten Sie, dass Sie auch einfach "cout << links" oder "cout << rechts" für die Ausrichtung verwenden können. –

7

Verwenden Sie die setw and setfill Anrufe:

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

reaktiviert und + 1'ed tun da es zeigt, wie man es in jedem Namespace macht (auch setfill hinzugefügt, sqook, hoffe du nicht m ind). – paxdiablo

+0

Fair genug. "Verwenden von Namespace Std;" ist definitiv böse. ;) –

+0

Ich denke, diese Antwort sollte erwähnen, dass, anders als die Einstellung von 'std :: setw', die Einstellung von' std :: setfill' beibehalten wird, nachdem die Ausgabe durchgeführt wurde, mit anderen Worten das Füllzeichen für 'std :: cout 'wird permanent geändert (bis zur Änderung durch ein anderes' std :: setfill'). Da dies unwahrscheinlich ist, erscheint es am besten, das vorherige Füllzeichen zu speichern und wiederherzustellen. –

0

oder

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

ausgeben wird 00001 als OP wollte schon

+3

Das OP hat explizit nach einem Weg gefragt, der den Operator '<<' anstelle von (s) printf verwendet. – jankes

+0

@jankes das wäre: std :: cout << "Postleitzahl:" << sprintf_s (t, "% 05d", 1) << endl; –

Verwandte Themen