格式化为cpp

时间:2016-01-10 15:15:59

标签: c++ c++11 formatting

我的程序中有一部分代码会产生与想要的结果形成对比的结果。

我必须打印许多条目的时间(预期和预定)。我需要将每个时间参数准确地打印在与前一个相同的位置。同样,当给定时间是例如8:30时,需要将其翻译为08:30

到目前为止,这是我的代码。 (重载<<运算符用于我的类,out是ostream ref,l是对类对象的引用)

if(l.get_hour() < 10 || l.get_minute() < 10)
{
    if(!(l.get_minute() < 10) && l.get_hour() < 10)
    {
        out << "0" << l.get_hour() << ":" << l.get_minute();
    }
    else if(l.get_minute() < 10 && !(l.get_hour() < 10))
        out << l.get_hour() << ":" << "0" << l.get_minute();
    else if(l.get_minute() < 10 && l.get_hour() < 10)
        out << "0" << l.get_hour() << ":" << "0" << l.get_minute();
}
else
    out << l.get_hour() << ":" << l.get_minute();
return out;

在我打印格式化输出之前,一切正常。

cout << right << setw(5) << entry[0].get_expected() << setw(5) << entry[0].get_scheduled() << endl;
cout << right << setw(5) << entry[9].get_expected() << setw(5) << entry[9].get_scheduled() << endl;

打印后会产生一些错位的时间数据。

所以,我的问题是它来自何处以及如何解决?

输出如下

14:45 15:50
 08:50  09:20

1 个答案:

答案 0 :(得分:1)

我猜测首先有几个空间然后输出的其余部分?那是因为setw操纵器仅适用于流的 next 输出。

您实际上并不需要 来设置字段宽度,因为您将始终打印出五个字符(如果重载函数正常工作)。

或者,您可以将时间格式化为ostringstream并使用该字符串对实际输出流执行单个输出。