2013-03-28 12 views
5

Uczę się C++. Mam problem z formatowaniem danych wyjściowych mojego programu. Chciałbym, aby wydrukować tam kolumny idealnie dopasowane, ale do tej pory nie mogę tego zrobić, tutaj jest mój kod:Wyjściowe kolumny wyrównane

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"; 
} 

w klasie pracownika mam metoda pracownik druku:

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

Problem jest, gdy Drukuję linię "flinstones", numer emp i stawka nie są wyrównane. coś takiego się dzieje:

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

Czy ktoś może mi pomóc? (Próbowałem dodać tabulatory ... ale to nie pomogło)

+2

http://stackoverflow.com/questions/275484/cout-formatting – Kirby

Odpowiedz

18

W klasie pracownik metody pracownika druku: Użyj tej linii, aby wydrukować.

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

Nie zapomniałeś dodać "<< left". Jest to wymagane, jeśli chcesz wyrównać do lewej.

Mam nadzieję, że przyda się.

+1

Tak, sądzę, że to była lewa rzecz, której mi brakowało. Dziękuję za pomoc! – mikey

5

Musisz ustawić szerokość przed, aby wydrukować nazwę, aby później można było ustawić inne elementy. Coś na tej ogólnej kolejności:

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

bym (przynajmniej zazwyczaj) unikać próbuje mieszać stałej szerokości pola z kartami, jak również. Zwykle łatwiej jest używać szerokości do wyrównania.