Вы получили ответ на свой вопрос (неинициализированные переменные).Я рекомендую вам распутать и упростить свой код, чтобы проблемы такого рода не возникали так часто.Например:
Создайте функцию, которая центрирует одну строку.
void center( std::ostream& os, const std::string& text, int width ) {
if ( text.size() >= width ) {
// Nothing to center, just print the text.
os << text << std::endl;
} else {
// Total whitespace to pad.
auto to_pad = width - text.size();
// Pad half on the left
auto left_padding = to_pad / 2;
// And half on the right (account for uneven numbers)
auto right_padding = to_pad - left_padding;
// Print the concatenated strings. The string constructor will
// correctly handle a padding of zero (it will print zero `=`).
os << std::string( left_padding, '=' )
<< text
<< std::string( right_padding, '=' )
<< std::endl;
}
}
После того, как вы проверили, что функция хорошо работает для одной строки, тривиально полагаться на C ++ дляпримените его к вектору строк:
void center( std::ostream& os,
const std::vector< std::string >& strings,
int width ) {
for ( auto&& string : strings ) {
center( os, string, width );
}
}
Если вы хотите использовать манипуляторы std::string
, или iomanip
, или std::setfill
, точка остается неизменной: не реализуйте "итерацию и форматирование"в той же функции.