Проблемы с выравниванием с & lt; iomanip & gt;

Так что я использую 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;
}

При этом я до сих пор не знаю, как решить эту проблему.

0

Решение

Почему вы должны перегружать оператора? Это, безусловно, то, что вызывает вашу проблему.

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

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]