输出对齐的列

时间:2013-03-28 04:05:32

标签: c++ cout

我正在学习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数和速率没有排成一行。这样的事情发生了:

Stone        43 35.750000
Rubble       163    12.000000
Flintstone        97    15.750000
Pebble       104    10.250000
Rockwall        15  22.750000

任何人都可以帮助我吗? (我试图添加标签..但它没有帮助)

3 个答案:

答案 0 :(得分:19)

在印刷员工方法的班级员工中: 使用此行进行打印。

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

您忘记添加“<< left”。如果您想要左对齐,则需要这样做。

希望它有用。

答案 1 :(得分:7)

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

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

我(至少通常)避免尝试将固定宽度字段与制表符混合。通常使用宽度来对齐事物通常更容易。

答案 2 :(得分:0)

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

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

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

img

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

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

它将为第一个参数(此处为543)分配5个字符的宽度,并在右侧填充该字符以对其进行格式化。同样,它将为第二个参数分配5个字符的字段。