在得到一个有用的答案here后,我遇到了另一个问题:在列中显示两个或多个字符串,我想让它显示出来。对于我遇到的问题的一个例子,我想要这个输出:
Come here! where? not here!
但改为
Come here! where? not here!
当我使用代码时
cout << left << setw(30) << "Come here!" << " where? " << setw(20) << "not here!" << endl;
我确信(我认为)两列的宽度可以包含两个字符串,但无论我设置列的宽度有多大,错误仍然存在。
答案 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;