Affichage du texte dans la colonne correcte
Question
Après avoir obtenu une réponse utile , je en cours encore un autre problème: l'affichage de deux ou plusieurs chaînes dans la colonne que je veux qu'il soit affiché dans pour un exemple du problème que je l'ai, je veux cette sortie.
Come here! where? not here!
mais obtenir
Come here! where? not here!
quand j'utilise le code
cout << left << setw(30) << "Come here!" << " where? " << setw(20) << "not here!" << endl;
Je me suis assuré (je pense) que la largeur des deux colonnes pourrait contenir les deux chaînes, mais peu importe la taille que je régler la largeur des colonnes à l'erreur est toujours là.
La solution
Comme indiqué, setw()
applique uniquement à l'entrée suivante, et que vous essayez de l'appliquer à deux entrées.
Une alternative aux autres suggestions qui vous donne la possibilité d'utiliser des variables en place des constantes littérales:
#include <iostream>
#include <sstream>
#include <iomanip>
using namespace std;
int main()
{
stringstream ss;
ss << "Come here!" << " where?";
cout << left << setw(30) << ss.str() << setw(20) << "not here!" << endl;
return 0;
}
Autres conseils
Vous devez imprimer le contenu de chaque colonne comme une seule chaîne, au lieu de plusieurs chaînes consécutives, parce que setw()
formats que la chaîne suivante à imprimer. Donc, vous devez concaténer les chaînes avant l'impression, en utilisant par exemple string::append()
ou +
:
cout << left << setw(30) << (string("Come here!") + " where? ") << setw(20) << "not here!" << endl;
setw
ne couvre que la chaîne suivante, vous aurez donc besoin de les concaténer.
cout << left << setw(30) << (string("Come here!") + string(" where? ")) << setw(20) << "not here!" << endl;