setw没有按预期工作

时间:2013-09-26 20:28:50

标签: c++ setw

我正在尝试以hh:mm格式打印时间,但当时间如01:01时,它打印为1:1。这是我的代码:

void output(int hour, int min, char ampm){
    cout << setw(2) << setfill('0') << "The time is: " << hour << ":" << min << " ";

    if(ampm == 'P'){
        cout << "PM";
    }
    else if (ampm == 'A'){
        cout << "AM";
    }
}

据我了解,应该有效。我包括iomanip。你能看出它有什么问题吗?

2 个答案:

答案 0 :(得分:5)

宽度是一种特殊的格式设置:当所有其他格式化标志都坚持时,width()将由每个输出操作符重置(好吧,您可以使用用户定义的输出操作符,不重置{ {1}}但这样做不会遵循正常的风格)。也就是说,您需要在应该受影响的输出之前设置宽度:

width()

答案 1 :(得分:2)

以下是正确的方法:

 cout<<""The time is: ";
 cout << setfill('0') <<setw(2) << hour << ":" <<setw(2) << min << " ";

参考: - this

相关问题