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」行を印刷すると、従業員数と率が並んでいないことです。このようなことが起こります:

ストーン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 に答える