为什么输出提前结束该行并用 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(' ')
。
我正在尝试创建一个特殊字符 "="
我想要的输出
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(' ')
。