Отображение текста в правильном столбце

StackOverflow https://stackoverflow.com/questions/2436283

  •  19-09-2019
  •  | 
  •  

Вопрос

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

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;
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top