2013-11-22 3 views
0

Решенный!Подкладка колонн вверх

enter image description here

Это то, что я писал:

cout << setw(4) << "Students"; 
cout << setw(20) << "Hours Worked"; 
cout << setw(20) << "of Total Hours"; 
cout << endl; 

for (int i = 0; i < students; i++) 
{ 
    cout << setw(20); 
    cout << names[i]; 
    cout << setw(10) << hours[i]; 
    cout << setw(10) << percent[i]; 
    cout << endl; 
} 

Но если первое имя несколько символов сортировщик или больше, чем второе имя, они становятся криво. Как бы я сохранил одинаковые одинаковые столбцы?

+0

сделать 'setw (20)' перед выводом имени –

+0

Это не похоже на работу, он помещает имена учащихся под «Часы Работали» –

+0

@Bob На самом деле, Мне удалось манипулировать моим кодом, и теперь он выравнивается правильно, спасибо. –

ответ

1

Попробуйте что-то вроде этого:

#include<iostream> 
#include <iomanip> 
#include<string> 

using namespace std; 


int main() 
{ 
    int students = 5; 
    string names[5] = {"a","bccc","c","d","ecsdfsdfasdasasf"}; 
    int hours[5] = {1,2,3,4,5}; 
    int percent[5] = {10,20,30,40,54}; 

    string column("Students"); 

    int maxStringSize = 0; 
    int sizeOfStudentColumn = column.length(); 

    for(int i = 0; i < 5; ++i) 
    { 
    if(maxStringSize < names[i].length()) 
    maxStringSize = names[i].length(); 
    } 

    if(sizeOfStudentColumn > maxStringSize) 
    maxStringSize = sizeOfStudentColumn; 

    cout<<"max size: "<<maxStringSize<<endl; 

    cout << setw(4) << "Students"; 
    cout << setw(maxStringSize + 5) << "Hours Worked"; 
    cout << setw(20) << "of Total Hours"; 
    cout << endl; 

    for (int i = 0; i < students; i++) 
    { 
// cout << setw(20); 
    cout << names[i]; 
    int diff = maxStringSize - names[i].length(); 
    cout << setw(diff + 5) << hours[i]; 
    cout << setw(20) << percent[i]; 
    cout << endl; 
    } 
} 
+0

Я уже решил проблему. Но спасибо, что нашли время ответить. +1 –

Смежные вопросы