c++ - 在cpp中格式化

标签 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

最佳答案

我猜首先有几个空间,然后是输出的其余部分?这是因为 setw 操纵器仅对流的next 输出起作用。

您实际上不需要设置字段宽度,因为您总是会打印出五个字符(如果重载函数正常工作的话)。

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

关于c++ - 在cpp中格式化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34707037/

相关文章:

c++ - 在 "if"语句中调用 std::set 函数时的意外评估结果

php - 如何使用php echo以与mysql文本字段中添加的格式相同的格式显示文本

java - 当用户具有不同的区域设置时,DecimalFormat 强制使用拉丁数字

python - 是否可以使用 weasyprint 对页脚进行精美的格式化?

c++ - 初始化在模板化父类中定义的结构

c++ - 在另一个类的构造函数中创建 n 个对象的最佳方法?

c++ - 从自定义集合中读取数据(结构数组)

java - Compact Language Detector 2 的检测方法线程安全吗?

c++ - std::function 和 std::bind 返回值

c++ - 如何返回 std::string.c_str()