2008-11-09 11 views
26

Je suis sûr que ce soit une question simple en ce qui concerne le formatage, mais est ici ce que je veux accomplir:Mise en forme Cout

Je veux des données de sortie sur l'écran à l'aide Cout. Je veux sortir ceci sous la forme d'un format de table. Ce que je veux dire par là, c'est que les colonnes et les lignes doivent être correctement alignées. Exemple:

Test     1 
Test2    2 
Iamlongverylongblah 2 
Etc     1 

Je ne suis concerné par la ligne de manière à ma ligne de sortie maintenant (ne fonctionne pas) est

Cout < < var1 < < "\ t \ t" < < var2 < < endl ;

Ce qui me donne quelque chose comme:

Test     1 
Test2     2 
Iamlongverylongblah   2 
Etc     1 

Répondre

44

setw.

#include <iostream> 
#include <iomanip> 
using namespace std; 

int main() { 
    cout << setw(21) << left << "Test" << 1 << endl; 
    cout << setw(21) << left << "Test2" << 2 << endl; 
    cout << setw(21) << left << "Iamlongverylongblah"  << 2 << endl; 
    cout << setw(21) << left << "Etc"  << 1 << endl; 
    return 0; 
} 
+0

ne me donne pas ce que je veux .. êtes-vous sûr que cela est correct? – BobS

+0

Vous avez oublié d'ajouter "<< left". Ceci est requis si vous voulez des champs fixes alignés à gauche. –

+1

std :: left n'est pas réinitialisé sur toutes les sorties formatées, vous n'en avez besoin qu'une seule fois. (La largeur du flux * est * réinitialisée.) –

11

Je conseille l'utilisation Boost Format. Utilisez quelque chose comme ceci:

cout << format("%|1$30| %2%") % var1 % var2; 
2

Vous devez trouver la longueur de la chaîne la plus longue dans la première colonne. Ensuite, vous devez générer chaque chaîne dans la première colonne dans un champ dont la longueur est celle de la chaîne la plus longue. Cela signifie nécessairement que vous ne pouvez rien écrire avant d'avoir lu chaque chaîne.

+0

N'y at-il pas un moyen plus facile? En utilisant setw ou quelque chose. – BobS

+1

> N'y a-t-il pas un moyen plus facile? Non, sauf si vous pouvez prédire l'avenir. > Utilisation de setw ou de quelque chose. Oui, setw est une façon de "sortir chaque chaîne de la première colonne dans un champ dont la longueur est celle de cette chaîne la plus longue". –

+1

La plupart des sorties formatées que j'ai vues ne se soucient pas de trouver la taille maximale d'un champ et si elle dépasse une valeur décente, eh bien, mais le formatage semble un peu bizarre quand il le fait. –

-2

vous pouvez le faire avec

string str = "somthing"; 
printf ("%10s",str); 
printf ("%10s\n",str); 
printf ("%10s",str); 
printf ("%10s\n",str);