【问题标题】:Check if skipws/noskipws flag is set for an input stream检查是否为输入流设置了 skipws/noskipws 标志
【发布时间】:2019-08-11 06:55:54
【问题描述】:

为了设置std::skipws(或std::noskipws)标志,需要写:

my_input_stream >> std::skipws; //or my_input_stream >> std::noskipws;

但是如果设置了标志,我该如何检查?我需要为我的 operator >> 启用 noskipws ,但我想在之后恢复之前设置的值。我知道 boost I/O 状态保存程序,但我需要为学生做一个演示,对于这个简单的目的,使用 boost 可能有点矫枉过正。

【问题讨论】:

    标签: c++ iostream iomanip


    【解决方案1】:

    您正在寻找std::ios_base::flags() :)

    【讨论】:

    • 啊,对。既然你这么说,它就开始敲响了。很多年前我第一次开始学习 C++ 时,我记得我曾经设置过这样的任何 iostream 标志。后来,我开始使用标准操纵器,不知何故忘记了这一点。谢谢你:)
    【解决方案2】:

    您需要使用flags() 成员函数。这将返回当前标志,您可以测试是否设置了std::ios_base::skipws 标志,如下所示:

    int main()
    {
        std::cin >> std::noskipws;
        if (!(std::cin.flags() & std::ios_base::skipws))
            std::cout << "no skipws set\n";
        std::cin >> std::skipws;
        if (std::cin.flags() & std::ios_base::skipws)
            std::cout << "skipws set";
    }
    

    【讨论】:

      【解决方案3】:

      您必须使用流的标志:

      my_input_stream.flags() & std::ios_base::skipws
      

      【讨论】:

        猜你喜欢
        • 2011-03-09
        • 2015-12-29
        • 2011-11-07
        • 2018-03-25
        • 1970-01-01
        • 1970-01-01
        • 2010-11-23
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多