setf(ios :: left,ios :: adjustfield)的组合有什么作用?

时间:2011-12-01 15:46:36

标签: c++ stl

我正在读一本教科书而且我遇到了这一行。

似乎在两列中巧妙地格式化输出(我猜左边的一个得到设置的宽度使得正确的一个看起来均匀,因为它全部从同一列开始)。我不太清楚这条线路到底在做什么。

cout.setf(ios::left, ios::adjustfield);

有人可以向我解释一下吗?

1 个答案:

答案 0 :(得分:5)

它强制使用左对齐输出固定宽度字段中的文本。见this reference。这是使用该函数的第二个重写,它接受掩码,在其中设置特定标志。

此覆盖将清除std::ios_base::adjustfield中设置的任何现有标志,该标志处理通过stream对象输出文本的理由。

不带标志掩码的覆盖(第二个参数)将简单地另外设置指定的标志,这在adjustfield的情况下没有多大意义,因为有效值仅为{ {1}},leftright,这些都涉及文字理由。

希望这个小例子能说清楚:

internal

它给出了输出:

#include <iostream>
#include <iomanip>
using namespace std;

int main()
{
   cout.setf(std::ios::left, std::ios::adjustfield);
   cout << setfill('^') << setw(10) << "Hello" << "\n";

   cout.setf(std::ios::right, std::ios::adjustfield);
   cout << setfill('0') << setw(10) << "99\n";

   return 0;
}