Отображение текста в правильном столбце
Вопрос
После получения полезного ответа здесь, Я столкнулся с еще одной проблемой:отображение двух или более строк в столбце, в котором я хочу, чтобы они отображались.Для примера проблемы, с которой я столкнулся, я хочу, чтобы этот вывод:
Come here! where? not here!
но вместо этого получите
Come here! where? not here!
когда я использую код
cout << left << setw(30) << "Come here!" << " where? " << setw(20) << "not here!" << endl;
Я убедился (я думаю), что ширина обоих столбцов может содержать две строки, но независимо от того, насколько большой я установил ширину столбцов, ошибка все равно присутствует.
Решение
Как указано, 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;
}
Другие советы
Вы должны напечатать содержимое каждого столбца в виде одной строки, а не нескольких последовательных строк, потому что setw()
форматирует только следующую строку для печати.Таким образом, вы должны объединить строки перед печатью, используя, например string::append()
или +
:
cout << left << setw(30) << (string("Come here!") + " where? ") << setw(20) << "not here!" << endl;
setw
охватывает только следующую строку, поэтому вам нужно будет их объединить.
cout << left << setw(30) << (string("Come here!") + string(" where? ")) << setw(20) << "not here!" << endl;