С++: setw() работает только с первой строкой в ​​цикле

Я пытаюсь проанализировать текстовый файл и вывести его содержимое на консоль с форматированием с помощью setw(). Моя проблема в том, что только первая строка отформатирована правильно, а остальные по умолчанию возвращаются влево.

while (test) 
{
    cout << setw(20) << right;
    string menu;
    price = 0;

    getline(test, menu, ',');
    test >> price;

    cout << setw(20) << right << menu;;

    if (price)
        cout << right << setw(10) << price;


}

Моя цель — добиться выравнивания вывода по самому длинному слову (длиной 20 пробелов) справа, но мой вывод заканчивается так:

           WordThatAlignsRight
notAligning
my longest sentence goal align
notAligning

Я хочу, чтобы каждое предложение выровняло по правому краю 20 пробелов в цикле. Любая помощь приветствуется, спасибо!


person Jaws88    schedule 21.03.2019    source источник


Ответы (1)


std::setw работает только на следующем элементе, после этого эффекта нет. Для получения дополнительной информации перейдите по этой ссылке.

Код на связанном сайте очень четко покажет вам, как работает std::setw.

#include <sstream>
#include <iostream>
#include <iomanip>

int main()
{
    std::cout << "no setw:" << 42 << '\n'
              << "setw(6):" << std::setw(6) << 42 << '\n'
              << "setw(6), several elements: " << 89 << std::setw(6) << 12 << 34 << '\n';
    std::istringstream is("hello, world");
    char arr[10];
    is >> std::setw(6) >> arr;
    std::cout << "Input from \"" << is.str() << "\" with setw(6) gave \""
              << arr << "\"\n";
}

Выход:

no setw:42
setw(6):    42
setw(6), several elements: 89    1234
Input from "hello, world" with setw(6) gave "hello"
person skratchi.at    schedule 21.03.2019