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

What does the combination of setf(ios::left, ios::adjustfield) do?

本文关键字:ios 组合 作用 什么 adjustfield left setf      更新时间:2023-10-16

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

似乎在两列中漂亮地格式化输出(我猜左边的宽度设置了,即使它都从同一列开始,右边的看起来也是如此(。 不过,我不太确定这条线到底在做什么。

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

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

它强制输出固定宽度字段中的文本,并提供左对齐。 请参阅此参考。 这是使用该函数的第二个覆盖,该覆盖采用在其中设置特定标志的掩码。

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

不采用标志掩码(第二个参数(的覆盖将简单地额外设置指定的标志,这在adjustfield的情况下没有多大意义,因为有效值只有 leftrightinternal ,它们都处理文本对齐。

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

#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) << "99n";
   return 0;
}

它给出输出:

Hello^^^^^
000000099