Также искал наиболее подходящее решение. Реализация этого оператора может вызвать проблемы. И не всегда допустимо читать всю строку или не смешивать разные типы в одной строке ввода.
Чтобы решить проблему, когда вы хотите прочитать некоторые данные из cin
и не знаете, правильно ли были извлечены пробелы после последней операции ввода, вы можете сделать так:
std::string str;
std::cin >> std::ws >> str;
Но вы не можете использовать это для очистки завершающего символа новой строки после последней операции ввода из cin, чтобы не влиять на новый ввод, потому что std::ws
будет использовать все пробелы и не вернет управление до тех пор, пока не будет введен первый символ, отличный от ws или EOF
будет найден, поэтому нажатие Enter не завершит процесс ввода.
В этом случае следует использовать
std::cin.ignore( std::numeric_limits<std::streamsize>::max(), '\n' );
, который является более гибким.
P.S. Если получено сообщение об ошибке с функцией max()
, такой как «ожидаемый идентификатор», это может быть вызвано макросами max
, определенными в некотором заголовке (например, Microsoft); это можно исправить с помощью
#undef max