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.

Was it helpful?

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;
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top