2010-10-05 7 views
4

Je cherche comment imprimer en C++ pour que la largeur de la colonne de la table soit fixe. actuellement j'ai fait en utilisant des espaces et | et -, mais dès que le nombre passe à deux chiffres tout l'alignement va mal.Impression en C++ et format table

|---------|------------|-----------| 
| NODE | ORDER | PARENT | 
|---------|------------|-----------| 
| 0  |  0  |   | 
|---------|------------|-----------| 
| 1  |  7  |  7  | 
|---------|------------|-----------| 
| 2  |  1  |  0  | 
|---------|------------|-----------| 
| 3  |  5  |  5  | 
|---------|------------|-----------| 
| 4  |  3  |  6  | 
|---------|------------|-----------| 
| 5  |  4  |  4  | 
|---------|------------|-----------| 
| 6  |  2  |  2  | 
|---------|------------|-----------| 
| 7  |  6  |  4  | 
|---------|------------|-----------| 
+0

Il semble que vous devez définir une largeur par défaut de votre format d'impression. Pouvez-vous nous montrer comment vous imprimez. 'std :: cout' ou' printf() ' – linuxuser27

+0

Voir ma solution ici: [http://stackoverflow.com/a/20924887/1325279](http://stackoverflow.com/a/20924887/1325279) – synaptik

Répondre

8

Vous pouvez utiliser le manipulateur std::setw pour cout.

Il existe également un std::setfill pour spécifier le remplissage, mais par défaut, il s'agit d'espaces.

Si vous souhaitez centrer les valeurs, vous devrez effectuer quelques calculs. Je suggère d'aligner les valeurs à droite car ce sont des nombres (et c'est plus facile).

cout << '|' << setw(10) << value << '|' setw(10) << value2 << '|' << endl; 

N'oubliez pas d'inclure <iomanip>.

Il ne serait pas beaucoup de peine pour envelopper cela en fonction de formatter de table générale, mais je vais laisser cela comme un exercice pour le lecteur :)

+0

@ Avinash: "Ce qui ne va pas avec ça" n'est pas vraiment une bonne question. Obtenez-vous une erreur de compilation? Est-ce mal formaté? S'il vous plaît fournir plus. Vous pouvez mettre à jour votre question avec ceci ... – JoshD

+0

Pendant les programmes parallèles/multicœurs, cela sera foutu à coup sûr. –

5

Vous pouvez utiliser le beautiful printf(). Je trouve plus facile pour le formatage & que cout.

Exemples:

int main() 
{ 
    printf ("Right align: %7d:)\n", 5); 
    printf ("Left align : %-7d:)\n", 5); 

    return 0; 
} 
+0

Le commentaire d'Avinash à la solution acceptée met bien en évidence pourquoi printf() est de loin supérieur à cout pour la sortie formatée. ;) – dandan78

+0

@ dandan78 Quel commentaire? :RÉ –