使用 std::cin 的输入仅适用于浮点数,仅当值尾随字母"e"(大写和小写)时

Input using std::cin doesn't work for floating point only when the value is trailed by the letter 'e' (both upper and lower case)

本文关键字:输入 cin std 适用于 浮点数 使用      更新时间:2023-10-16

我编写了一个从 std::cin 获取用户输入并返回它的方法,到目前为止,它适用于我的所有测试,除了浮点数或双精度后跟字母"e"。

这是方法:

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: ");

该方法为我迄今为止尝试过的所有方法返回正确的值,但是当值后面跟着"e"时,std::cin 失败。

例如:12.34读作 12.34,ae1.23f1 读作 1.23,但 std::cin 在 1.2ef 和 12E 上失败,因为数字后面紧跟着 和 'e'

请注意,当方法的返回类型更改为浮点数时,它仍然会产生与 double 相同的问题。这对我来说没有任何意义,因为这是我发现的唯一导致程序无法正常工作的东西,所以我的猜测是这是 std::cin 处理输入的方式。

免责声明:我是java的C ++新手,所以我的代码可能还有其他一些小错误,例如返回Arg((;如果类没有默认构造函数,则不起作用,所以我必须修复它。

如果你输入一个数字后跟一个e(或E(,那么cin期望用科学记数法输入一个数字。如果e后没有整数(负数或其他(,那么这不是有效的科学记数法,cin将无法将其读作浮点floatdouble

该错误类似于您输入类似3...