【问题标题】:setw not working as expectedsetw 没有按预期工作
【发布时间】:2013-09-26 20:28:49
【问题描述】:

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

【问题讨论】:

    标签: c++ setw


    【解决方案1】:

    宽度是一个特殊的格式设置:虽然所有其他格式标志都是固定的,但width() 将由每个输出运算符重置(当然,您可以使用不重置width() 的用户定义的输出运算符但这样做不会遵循正常的风格)。也就是说,您需要在应该受影响的输出之前立即设置宽度:

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

    【讨论】:

    • 多么方便,std::ostream。谢谢你的回答,@Dietmar。
    【解决方案2】:

    以下是正确的方法:

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

    参考:-this

    【讨论】:

    • 谢谢!我没有意识到它必须在变量之前。
    猜你喜欢
    • 1970-01-01
    • 2021-10-19
    • 2020-03-18
    • 2012-06-14
    • 2014-11-15
    • 1970-01-01
    • 2012-07-02
    • 2011-09-07
    • 2013-03-03
    相关资源
    最近更新 更多