Так что я использую iomanip
библиотека, чтобы cout это:
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
Есть ли способ, как я могу это исправить, не используя другую библиотеку?
Редактировать: кажется, что перегрузка My Operator вызывает эту проблему:
std::ostream& operator<< (std::ostream& out, const char array[])
{
for (uint8_t i = 0; array[i] != '\0'; i++)
{
out << array[i];
}
return out;
}
При этом я до сих пор не знаю, как решить эту проблему.
Почему вы должны перегружать оператора? Это, безусловно, то, что вызывает вашу проблему.
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;
}
Других решений пока нет …