2010-03-12 5 views
0

Après avoir obtenu une réponse utile here, j'ai encore rencontré un autre problème: l'affichage de deux ou plusieurs chaînes dans la colonne où je veux l'afficher. Pour un exemple du problème que j'ai, je veux cette sortie:Affichage du texte dans la colonne correcte

Come here! where?    not here! 

mais se

Come here!      where? not here! 

lorsque 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 pouvait contenir les deux chaînes, mais quelle que soit la largeur que j'attribue à la largeur des colonnes, l'erreur est toujours là.

Répondre

2

Comme il est 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; 
} 
3

Vous devez imprimer le contenu de chaque colonne sous la forme d'une chaîne unique, au lieu de plusieurs chaînes consécutives, car setw() formate uniquement la chaîne suivante à imprimer. Vous devez donc concaténer les chaînes avant d'imprimer, en utilisant par ex. string::append() ou +:

cout << left << setw(30) << (string("Come here!") + " where? ") << setw(20) << "not here!" << endl; 
1

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; 
+0

Um, '(string ("Viens ici") + "où")' serait être suffisant et sauve un 'std :: string' ctor. (Pas que ça compte, quand on pourrait écrire "Viens ici où?", Mais, hé, je suis pédant ...) – sbi

+0

Ouais, ça économise la frappe, mais IMO ça casse la symétrie et la rend moins lisible. –

+0

Ce n'est pas qu'il sauve la frappe, il sauve un _call_ à un ctor, donc, l'exécution. – sbi

Questions connexes