格式化输出数据整齐地C ++

时间:2017-07-27 21:25:01

标签: c++

当我将程序结果打印到屏幕上时,数据到处都是,但我希望尽可能对齐结果。我正在使用setw(10)来执行此操作,但如果有人帮助我,它无法正常工作吗?

由于

这是输出的样子:

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;


    }
}

2 个答案:

答案 0 :(得分:1)

当然,您还必须设置字符串(或组合名称)输出的宽度:

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

(假设这些是std::string,以便+连接它们。)

答案 1 :(得分: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

的价值做出决定