Я написал метод для получения пользовательского ввода из std :: cin и его возврата, и пока он работает для всех моих тестов, за исключением числа с плавающей запятой или двойного числа, за которым следует буква 'e'.
Thisэто метод:
template <typename Arg>
Arg getInput(string message = "")
{
if (!is_fundamental<Arg>::value && typeid(string) != typeid(Arg))
{
return Arg();
}
if (!message.empty())
{
print(message);
}
Arg out;
cin >> out;
while (cin.fail())
{
cin.clear();
cin.ignore();
cin >> out;
}
cin.ignore(INT_MAX, '\n');
return out;
}
Это вызов метода:
getInput<double>("Please Enter a Double: ");
Метод возвращает правильное значение для всего, что я пробовал до сих пор, но std :: cin завершается неудачно, когдазначение завершается символом 'e'.
Например: 12.34 читается как 12.34, ae1.23f1 читается как 1.23, но std :: cin завершается ошибкой на 1.2ef и 12E, потому что сразу за числами следуети 'e'
Как примечание, когда тип возвращаемого значения метода изменяется на float, он по-прежнему вызывает ту же проблему, что и double.Это не имеет никакого смысла для меня, потому что это единственное, что я обнаружил, чтобы программа не работала, поэтому я предполагаю, что именно так std :: cin обрабатывает ввод.
Отказ от ответственности: Я новичок в C ++ из Java, поэтому мой код, вероятно, имеет некоторые другие незначительные ошибки, такие как return Arg ();не будет работать, если у класса нет конструктора по умолчанию, поэтому я должен это исправить.