Я пишу эту функцию для запроса определенного типа ввода.is_type только подтверждает, что полученная строка может быть приведена с использованием stringstream к желаемому типу.
template<typename T>
T get_type(std::string prompt)
{
T output;
std::cout << prompt;
std::string Input;
while (std::getline(std::cin, Input) && !is_type<T>(Input))
{
std::cout << "Invalid input type. Please try again:\n"
<< prompt;
}
std::stringstream(Input) >> output;
return output;
}
Функции, кажется, работают должным образом, за исключением случаев, когда я, например, набираю ctrl + Z.Как правильно решить эту проблему?
Я добавил:
template<typename T>
T get_type(std::string prompt)
{
T output;
std::cout << prompt;
std::string Input;
while (std::getline(std::cin, Input) && !is_type<T>(Input))
{
std::cout << "Invalid input type. Please try again:\n"
<< prompt;
}
if (!std::cin)
{
std::cin.clear();
std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
output = get_type<std::string>(prompt) ;
return output;
}
std::stringstream(Input) >> output;
return output;
}
, который снова запрашивает ввод после, например, ctrl + Z Решает ли это мою проблему с std :: getline (Сбой std :: cin, std :: string) при вводе пользователем кода на Kewyboard?
Кроме того, почему я должен нажать 2 раза, чтобы строка
output = get_type<std::string>(prompt) ;
запускалась внутриесли.