我正在尝试以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。您能看到有什么问题吗?

最佳答案

宽度是一种特殊的格式设置:当所有其他格式标记都保留下来时,每个输出运算符都会重置width()(好吧,您可以使用用户定义的输出运算符,它们不会重置width(),但是这样做不会遵循普通样式)。也就是说,您需要在应该受到影响的输出之前立即设置宽度:

std::cout << std::setfill('0')
          << std::setw(2) << hour << ':'
          << std::setw(2) << min << ' ';

关于c++ - setw不能按预期工作,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19038082/

10-09 13:33