J'ai essayé de formater la sortie à la console pendant la période la plus longue et que rien ne se passe vraiment. J'essaie d'utiliser autant de iomenip code> comme je peux et des fonctions ofstream et code> Out. void list::displayByName(ostream& out) const
{
node *current_node = headByName;
// I have these outside the loop so I don't write it every time.
out << "Name\t\t" << "\tLocation" << "\tRating " << "Acre" << endl;
out << "----\t\t" << "\t--------" << "\t------ " << "----" << endl;
while (current_node)
{
out << current_node->item.getName() // Equivalent tabs don't work?
<< current_node->item.getLocation()
<< current_node->item.getAcres()
<< current_node->item.getRating()
<< endl;
current_node = current_node->nextByName;
}
// The equivalent tabs do not work because I am writing names,
// each of different length to the console. That explains why they
// are not all evenly spaced apart.
}
4 Réponses :
Vous pouvez écrire une procédure qui imprime toujours le même nombre de caractères à la sortie standard.
quelque chose comme: p> puis utiliser comme celui-ci dans votre programme: p>
abandonner sur les onglets. Vous devriez pouvoir utiliser des manipulateurs IO pour définir la largeur de champ, le caractère de remplissage et le drapeau de format (pour obtenir une justification à gauche ou à droite). Utilisez les mêmes valeurs pour les en-têtes que vous le faites pour les données, et tout devrait sortir bien. P>
Aussi méfiez-vous que vous avez changé de note et d'acres dans votre exemple. P>
pense à cela comme utiliser Microsoft Excel :)
Vous pensez à votre ruisseau comme champs. Vous définissez donc la largeur du champ, puis vous insérez votre texte dans ce champ. Par exemple: ...... p> ...... p> La largeur de champ ne signifie que la largeur du ..... p> ...... p> Je pense que le meilleur moyen est de comprendre votre format, écrivez un nouveau formateur qui fait tout ce que vous voulez: p>
p> text + espaces code>. Vous pouvez remplir code> autre que des espaces: p> int code> ou long code> sont faciles à mettre en œuvre, d'autres types sont vraiment obscurs si vous n'êtes pas familier avec des flux de flux c ++ code>. p> p>
+1 pour les manipulateurs IO standard (SETW & AL), +1 pour la définition d'une personnalisation iOMIP, -1 pour Excel
Et vous pouvez également limiter la taille de la chaîne à imprimer au cas où vous auriez de grandes chaînes (telles que les noms complets)
Boost a une bibliothèque de format qui vous permet de formater facilement l'OVCUT comme l'ancien C Printf () mais avec la sécurité de type C ++.
N'oubliez pas que l'ancien C Printf () vous a permis de spécifier une largeur de champ. Cet espace remplit le champ si la sortie est sous-dimensionnée (note qu'il ne fait pas face à des champs sur-taille). P>
#include <iostream>
#include <iomanip>
#include <boost/format.hpp>
struct X
{ // this structure reverse engineered from
// example provided by 'Mikael Jansson' in order to make this a running example
char* name;
double mean;
int sample_count;
};
int main()
{
X stats[] = {{"Plop",5.6,2}};
// nonsense output, just to exemplify
// stdio version
fprintf(stderr, "at %p/%s: mean value %.3f of %4d samples\n",
stats, stats->name, stats->mean, stats->sample_count);
// iostream
std::cerr << "at " << (void*)stats << "/" << stats->name
<< ": mean value " << std::fixed << std::setprecision(3) << stats->mean
<< " of " << std::setw(4) << std::setfill(' ') << stats->sample_count
<< " samples\n";
// iostream with boost::format
std::cerr << boost::format("at %p/%s: mean value %.3f of %4d samples\n")
% stats % stats->name % stats->mean % stats->sample_count;
}