C ++:setw()仅在循环的第一行上工作

时间:2019-03-21 06:01:49

标签: c++ iomanip 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个空格。感谢您的任何帮助,谢谢!

1 个答案:

答案 0 :(得分:8)

std::setw仅适用于下一个元素,此后无效。有关更多信息,请遵循此link.

链接站点上的代码将非常清楚地向您展示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"