在正确的列中显示文本

时间:2010-03-12 22:20:53

标签: c++ cout setw

在得到一个有用的答案here后,我遇到了另一个问题:在列中显示两个或多个字符串,我想让它显示出来。对于我遇到的问题的一个例子,我想要这个输出:

Come here! where?             not here!

但改为

Come here!                     where? not here!

当我使用代码时

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

我确信(我认为)两列的宽度可以包含两个字符串,但无论我设置列的宽度有多大,错误仍然存​​在。

3 个答案:

答案 0 :(得分:3)

您应该将每列的内容打印为单个字符串,而不是多个连续的字符串,因为setw()只格式化要打印的下一个字符串。因此,您应该在打印前连接字符串,例如使用string::append()+

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

答案 1 :(得分:2)

如上所述,setw()仅适用于下一个输入,并且您尝试将其应用于两个输入。

其他建议的替代方法,使您有机会使用变量代替文字常量:

#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;
}

答案 2 :(得分:1)

setw仅涵盖下一个字符串,因此您需要将它们连接起来。

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