2017-07-27 56 views
-1

當我將程序的結果打印到屏幕上時,數據遍佈整個地方,但我想盡可能將結果對齊。我使用setw(10)爲了做到這一點,但它不能正常工作,有人可以幫助我嗎?將輸出數據整齊地格式化C++

感謝

這是輸出的樣子:

enter image description here

這是我的打印功能:

void Print(const call_record *call_DB, int & count) 
{ 

    cout << fixed << showpoint << setprecision(2); 
    for(int i= 0; i <= count; i++) 
    { 
     cout << call_DB[i].firstname <<" " << call_DB[i].lastname <<" " << call_DB[i].cell_number <<setw(15) << call_DB[i].relays <<setw(10) << call_DB[i].call_length; 
     cout <<setw(10) << call_DB[i].net_cost <<setw(10) << call_DB[i].call_rate << setw(10) << call_DB[i].call_tax <<setw(10) << call_DB[i].total_cost; 

     cout << endl; 


    } 
} 
+0

你可以看看[這裏](https://stackoverflow.com/questions/6755250/format-output-in-a-table-c)。 –

回答

1

必須的,當然,也設置的寬度字符串(或組合名稱)的輸出:

cout << std::setw(20) << (call_DB[i].firstname + call_DB[i].lastname); 

(假設這些是std::string s使得+連接它們)。

1

我在C++輸出中已知的最佳實踐之一就是使用模板函數。

樣品

你的模板函數:

template<typename T> void coutElement(T t, const int& width) 
{ 
    cout << std::left << setw(width) << setfill(separator) << t; 
} 

使用它:

const int name_width = 10; //non sense value 
const int num_width = 10; //non sense value 
coutElement("Dainer", name_width); 
coutElement("Doe", name_width); 
coutElement(250, num_width); 

這一直完美地工作,關於它的唯一挑戰的事情是您將採取的值爲name_widthnum_width

+1

什麼是「左」? – Walter

+0

對不起,我沒有編輯我從我的項目中複製的代碼。謝謝。 –

+1

我假設它的std :: left – pm100