2009-02-10 6 views
44

Comment puis-je formater ma sortie en C++? Autrement dit, quel est le C++ équivalent à l'utilisation de printf comme ceci:Imprimer les zéros à gauche avec l'opérateur de sortie C++ (équivalent printf)?

printf("%05d", zipCode); 

Je sais que je pourrais simplement utiliser printf en C++, mais je préférerais l'opérateur de sortie <<.

Pourriez-vous simplement utiliser ce qui suit?

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

Répondre

69

Cela va faire l'affaire:

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

Les manipulateurs IO les plus courantes qui contrôlent le rembourrage sont:

  • std::setw(width) ensembles la largeur de t Le champ
  • std::setfill(fillchar) définit le caractère de remplissage.
  • std::setiosflags(align) définit l'alignement, où align est ios :: left ou ios :: right.
+2

Notez que vous pouvez également utiliser 'cout << left' ou' cout << right' pour l'alignement. –

7

Utilisez les setw and setfill appels:

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

réactivés et + 1'ed car il montre comment le faire dans n'importe quel espace de noms (également ajouté setfill, sqook, j'espère que vous ne le faites pas Indiana). – paxdiablo

+0

Assez juste. "using namespace std;" est définitivement mauvais. ;) –

+0

Je pense que cette réponse devrait mentionner que, contrairement au réglage de 'std :: setw', le réglage de' std :: setfill' restera après la sortie, c'est-à-dire le caractère de remplissage 'std :: cout' sera changé de façon permanente (jusqu'à ce qu'il soit modifié par un autre 'std :: setfill'). Comme il est peu probable que cela soit souhaitable, il semble préférable de sauvegarder et de restaurer le caractère de remplissage précédent. –

0

ou,

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

volonté sortie 00001 comme l'OP voulait déjà faire

+3

L'OP a explicitement demandé une méthode qui utilise l'opérateur '<<' au lieu de (s) printf. – jankes

+0

@jankes qui serait: std :: cout << "code postal:" << sprintf_s (t, "% 05d", 1) << endl; –