2017-07-27 77 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