Проверьте, установлен ли флаг skipws/noskipws для входного потока.

Чтобы установить флаг std::skipws (или std::noskipws), нужно написать:

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

Но как проверить, установлен ли флаг? Мне нужно включить noskipws для моего operator >> , но я хочу после восстановить ранее установленное значение. Я знаю об ускорении сохранения состояния ввода-вывода, но мне нужно провести демонстрацию для студентов, и использование повышения может быть излишним для этой простой цели.


person Armen Tsirunyan    schedule 20.03.2019    source источник


Ответы (3)


Вы ищете std::ios_base::flags() :)

person Quentin    schedule 20.03.2019
comment
Ах, верно. Теперь, когда вы это сказали, это начало звонить в колокольчик. Когда я впервые начал изучать C++ много лет назад, я помню, что устанавливал такие флаги iostream. Позже я начал пользоваться стандартными манипуляторами и как-то забыл об этом. Спасибо :) - person Armen Tsirunyan; 20.03.2019

Вам необходимо использовать функцию-член 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";
}
person NathanOliver    schedule 20.03.2019

Вы должны использовать флаги вашего потока:

my_input_stream.flags() & std::ios_base::skipws
person user6556709    schedule 20.03.2019