为什么输出提前结束该行并用 setfill 填充每个空白区域而不是用它创建一行?

Why is the output ending the line early and filling every empty spaces with setfill instead of creating a line with it?

我正在尝试创建一个特殊字符 "="

我想要的输出

Name====================
Horace Horsecollar    56.00  12.50  700.00  210.00  10  480.00
Eleven Thirty         34.00  12.50  425.00  127.50  10  287.50
Victoria Elven        34.00  12.50  425.00  127.50  10  287.50

但是这里的输出是用 "="

填充输出中的所有空白区域

我得到的输出

Name
==Horace Horsecollar====56.00  12.50  700.00  210.00  10  480.00
Eleven Thirtyman======34.00  12.50  425.00  127.50  10  287.50
Victoria Elven========34.00  12.50  425.00  127.50  10  287.50

Employees.push_back(new Employee("Horace Horsecollar", 56, 12.5));
Employees.push_back(new Employee("Eleven", 34, 12.5));
Employees.push_back(new Employee("Victoria Elven", 34, 12.5));

代码

cout << "Name" << setw(20) << setfill('=') << endl;

for (vector<Employee *>::iterator i = Employees.begin(); i < Employees.end(); i++) {
  cout << (*i)->getName() 
  
  << setw(27 - ((*i)->getNamesize()) ) << fixed << setprecision(2) 
  << (*i)->getHoursWorked() 
  << "  " << (*i)->getHourlyRate() 
  << "  " << (*i)->getGrossPay()
  << "  " << (*i)->getTaxes()
  << "  " << 10
  << "  " << (*i)->getNetPay() << "\n";

我真的很迷茫,关于cout有一些我不明白,但我不知道它是什么。

感谢评论,真的很有帮助

我在该行的末尾漏掉了一个“=”以使其完整

cout << "Name" << setw(17) << setfill('=') << "=" << setfill(' ') << endl;

输出

Name=================
Horace Horsecollar    56.00  12.50  700.00  210.00  10  480.00
Eleven Thirty         34.00  12.50  425.00  127.50  10  287.50
Victoria Elven        34.00  12.50  425.00  127.50  10  287.50

您需要在文本之前放置格式化程序。










cout << setw(21) << setfill('=') << left << "Name" << setfill(' ') << endl;

left关键字表示后面的文字将排在21个字符的列的左侧。填充字符会在右边。

这也适用于打印名称的循环的第一部分。 setw() 的全部意义在于你不需要处理列中数据的长度。

for (vector<Employee *>::iterator i = Employees.begin(); i < Employees.end(); i++) {
  cout << setw(22) << left << (*i)->getName() 
       << fixed << setprecision(2) << (*i)->getHoursWorked() 
       << "  " << (*i)->getHourlyRate()
       << "  " << (*i)->getGrossPay()
       << "  " << (*i)->getTaxes()
       << "  " << 10
       << "  " << (*i)->getNetPay() << "\n";
}

在这里,名称将放在 22 个字符的列的左侧。 space 的其余部分被 space 占用,因为在名称标题之后调用了 setfill(' ')