8

我正在学习 C++。我在格式化程序的输出时遇到问题。我想在那里打印完全对齐的列,但到目前为止我做不到,这是我的代码:

int main()
{
    employee employees[5];

    employees[0].setEmployee("Stone", 35.75, 053);
    employees[1].setEmployee("Rubble", 12, 163);
    employees[2].setEmployee("Flintstone", 15.75, 97);
    employees[3].setEmployee("Pebble", 10.25, 104);
    employees[4].setEmployee("Rockwall", 22.75, 15);

    printEmployees(employees, 5);

    return 0;
}

// print the employees in my array
void printEmployees(employee employees[], int number)
{
    int i;

    for (i=0; i<number; i++) {
        employees[i].printEmployee();// this is the method that give me problems
    }
    cout << "\n";
}

在类员工中,我有打印员工方法:

void printEmployee() const
{
    cout << fixed;
    cout << surname << setw(10) << empNumber << "\t" << setw(4) << hourlyRate << "\n";
}

问题是当我打印“flinstones”行时,emp 编号和 rate 没有对齐。发生这样的事情:

斯通 43 35.750000
碎石 163 12.000000
燧石 97 15.750000
鹅卵石 104 10.250000
罗克沃尔 15 22.750000

有谁能够帮助我?(我试图添加标签..但它没有帮助)

4

3 回答 3

21

在 print employee 方法的类employee 中: 使用此行进行打印。

cout << setw(20) << left << surname << setw(10) << left << empNumber << setw(4) << hourlyRate << endl;

你忘了加“ << left”。如果您想左对齐,这是必需的。

希望它会有用。

于 2013-03-28T04:24:32.197 回答
9

您需要在打印名称之前设置一个宽度,以便在此之后排列其他内容。这个一般顺序的东西:

cout << left << setw(15) << surname 
     << setw(10) << empNumber << "\t" 
     << setw(4) << hourlyRate << "\n";

我(至少通常)会避免尝试将固定宽度的字段与选项卡混合使用。通常只使用宽度来对齐事物更容易。

于 2013-03-28T04:15:27.337 回答
0

C++ 支持许多可用于格式化输出的特性。这些功能包括:

  1. ios 类函数和标志
  2. 机械手

使用 ios 类函数,我们可以使用 ios 类的 width() 方法,如下所示:

图像

或者我们可以使用操纵器来格式化输出。要打印上述输出,我们可以使用:

cout << right << setw(5) << 543 << right << setw(5) << 12 << endl;

它将为第一个参数分配 5 个字符宽度(这里是 543)并通过在右侧填充它来格式化它。同样,它将为第二个参数分配一个 5 个字符的字段。

于 2020-11-10T18:10:31.450 回答