C ++: setw () работает только в первом ряду, в цикле - PullRequest
2 голосов
/ 21 марта 2019

Я пытаюсь проанализировать текстовый файл и вывести его на консоль с форматированием с помощью 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 пробелам в цикле. Любая помощь приветствуется, спасибо!

1 Ответ

8 голосов
/ 21 марта 2019

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"
...