因此,我使用iomanip库来显示以下内容:
std::cout << std::endl
<< std::left << std::setw(15) << "Ticker Symbol"
<< std::setw(100) << "Stock Name"
<< std::setw(12) << "Value"
<< std::setw(10) << "Date"
<< std::setw(10) << "YTD Return"
<< std::endl;问题是,它最终会打印以下内容:
T icker SymbolS tock NameV alueD ateY TD Return而不是:
Ticker Symbol Stock Name Value Date YTD Return有什么方法可以不使用其他库来修复这个问题吗?
编辑:我的操作符重载功能似乎导致了这个问题:
std::ostream& operator<< (std::ostream& out, const char array[])
{
for (uint8_t i = 0; array[i] != '\0'; i++)
{
out << array[i];
}
return out;
}尽管如此,我还是不知道如何解决这个问题。
发布于 2015-11-09 20:55:36
你为什么要让接线员超负荷?这当然是导致你的问题的原因。
setw将被应用于流的第一件输出,而且由于c-字符串一次输出一个字母,所以setw只应用于第一个字母--生成您正在看到的行为。
最简单的方法就是摆脱操作者的过载。否则,您需要从cout.width()获得宽度,一次输出一个字母,然后在之后添加额外的空格:
std::ostream& operator<< (std::ostream& out, const char array[])
{
int width = out.width();
out.width(0);
int array_size = 0;
for (uint8_t i = 0; array[i] != '\0'; i++, array_size++)
{
out << array[i];
}
for (int i = array_size; i < width; i++)
{
out << " ";
}
return out;
}https://stackoverflow.com/questions/33616841
复制相似问题