Displaying text in correct column
Question
After getting a helpful answer here, I have run into yet another problem: displaying two or more strings in the column I want it to be displayed in. For an example of the problem I have, I want this output:
Come here! where? not here!
but instead get
Come here! where? not here!
when I use the code
cout << left << setw(30) << "Come here!" << " where? " << setw(20) << "not here!" << endl;
I made sure (I think) that the width of both columns could contain the two strings, but no matter how large I set the width of the columns to be, the error is still there.
Solution
As stated, setw()
only applies to the next input, and you are trying to apply it to two inputs.
An alternative to the other suggestions which gives you a chance to use variables in place of literal constants:
#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;
}
OTHER TIPS
You should print the contents of each column as a single string, instead of multiple consecutive strings, because setw()
only formats the next string to be printed. So you should concatenate the strings before printing, using e.g. string::append()
or +
:
cout << left << setw(30) << (string("Come here!") + " where? ") << setw(20) << "not here!" << endl;
setw
only covers the next string, so you'll need to concatenate them.
cout << left << setw(30) << (string("Come here!") + string(" where? ")) << setw(20) << "not here!" << endl;