Отображение текста в правильном столбце - PullRequest
0 голосов
/ 13 марта 2010

Получив полезный ответ здесь , я столкнулся с еще одной проблемой: отображение двух или более строк в столбце, в котором я хочу, чтобы оно отображалось. Для примера проблемы, которую я имею, я хочу этот вывод:

Come here! where?             not here!

но вместо этого получите

Come here!                     where? not here!

когда я использую код

cout << left << setw(30) << "Come here!" << " where? " << setw(20) << "not here!" << endl;

Я убедился (я думаю), что ширина обоих столбцов может содержать две строки, но независимо от того, насколько большой я установил ширину столбцов, ошибка все равно остается.

Ответы [ 3 ]

3 голосов
/ 13 марта 2010

Вы должны печатать содержимое каждого столбца как одну строку вместо нескольких последовательных строк, потому что setw() форматирует только следующую строку для печати. Таким образом, вы должны объединить строки перед печатью, используя, например, string::append() или +:

cout << left << setw(30) << (string("Come here!") + " where? ") << setw(20) << "not here!" << endl;
2 голосов
/ 13 марта 2010

Как указано, 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;
}
1 голос
/ 13 марта 2010

setw охватывает только следующую строку, поэтому вам нужно объединить их.

cout << left << setw(30) << (string("Come here!") + string(" where? ")) << setw(20) << "not here!" << endl;
...