2013-03-28 33 views
5

Sto imparando C++. Ho un problema nella formattazione dell'output del mio programma. Vorrei stampare là colonne perfettamente allineate ma finora non possono farlo, qui è il mio codice:Colonne allineate di output

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

nel dipendente di classe che ho il metodo impiegato di stampa:

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

problema è quando Io stampo la linea "flinstones" il numero emp e il rate non sono allineati. qualcosa di simile accade:

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

Qualcuno può aiutarmi? (Ho provato ad aggiungere schede .. ma non ha aiutato)

+2

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

risposta

18

Nella classe dipendente del metodo impiegato di stampa: Utilizzare questa riga per stampare.

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

Hai dimenticato di aggiungere "<< left". Questo è richiesto se vuoi allineato a sinistra.

Spero che sia utile.

+1

Sì, immagino che fosse la cosa di sinistra che mi mancava. Grazie per l'aiuto! – mikey

5

È necessario impostare una larghezza prima di si stampa il nome per ottenere altre cose da allineare dopo. Qualcosa in questo ordine generale:

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

Vorrei (almeno normalmente) evitare di provare a combinare anche campi a larghezza fissa con schede. In genere è più facile usare solo le larghezze per allineare le cose.

Problemi correlati