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

Joh*_*0te 4 c++ stl

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

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

cout.setf(ios::left, ios::adjustfield);
Run Code Online (Sandbox Code Playgroud)

谁可以给我解释一下这个?

Cha*_*had 6

它强制使用左对齐输出固定宽度字段中的文本.请参阅此参考.这是使用该函数的第二个重写,它接受掩码,在该掩码中设置特定标志.

此覆盖将清除所有已设置的标志,这些标志std::ios_base::adjustfield处理通过stream对象输出文本的对齐方式.

不带标志掩码(第二个参数)的覆盖将简单地另外设置指定的标志,这在adjustfield因为有效值仅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;
}
Run Code Online (Sandbox Code Playgroud)

它给出了输出:

Hello^^^^^
000000099
Run Code Online (Sandbox Code Playgroud)