我正在读一本教科书而且我遇到了这一行。
似乎在两列中巧妙地格式化输出(我猜左边的一个得到设置的宽度使得正确的一个看起来均匀,因为它全部从同一列开始)。我不太清楚这条线路到底在做什么。
cout.setf(ios::left, ios::adjustfield);
有人可以向我解释一下吗?
答案 0 :(得分:5)
它强制使用左对齐输出固定宽度字段中的文本。见this reference。这是使用该函数的第二个重写,它接受掩码,在其中设置特定标志。
此覆盖将清除std::ios_base::adjustfield
中设置的任何现有标志,该标志处理通过stream
对象输出文本的理由。
不带标志掩码的覆盖(第二个参数)将简单地另外设置指定的标志,这在adjustfield
的情况下没有多大意义,因为有效值仅为{ {1}},left
和right
,这些都涉及文字理由。
希望这个小例子能说清楚:
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;
}