检查是否为输入流设置了 skipws/noskipws 标志

Check if skipws/noskipws flag is set for an input stream

提问人:Armen Tsirunyan 提问时间:3/20/2019 更新时间:3/21/2019 访问量:517

问:

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

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

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

C++ IOstream iomanip

评论


答:

6赞 Quentin 3/20/2019 #1

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

评论

0赞 Armen Tsirunyan 3/20/2019
啊,对。既然你说了,它就开始敲响了警钟。当我多年前第一次开始学习 C++ 时,我记得我曾经设置过这样的任何 iostream 标志。后来,我开始使用标准机械手,不知何故忘记了这一点。谢谢你:)
3赞 user6556709 3/20/2019 #2

您必须使用流的标志:

my_input_stream.flags() & std::ios_base::skipws
4赞 NathanOliver 3/20/2019 #3

您需要使用 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";
}