使用 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)
我编写了一个从 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
将无法将其读作浮点float
或double
。
该错误类似于您输入类似3..
.
相关文章:
- 在while循环中输入带有std::cin的字符串后,控制台会输出大量胡言乱语
- 在C++中使用Cin,我如何在1行中输入
- 为什么无论你输入什么,这"while(cin.get(str,3))"只运行一次?
- cin 的十进制输入验证?
- 我无法在Visual Studio代码中使用CIN输入答案,它说输入您的年龄,但它说只读文本编辑器如何解决这个问题?
- 从 cin 读取不会返回整个输入字符串
- CIN 仅在输入非数字值时跳过下一个 CIN
- 当输入在带有空格的单行中给出时,cin 如何在 while 循环中工作?
- C++ 限制或使用户输入不可见 (std::cin)
- 为 c++ cin 上的输入数无效生成错误消息
- 从 cin 获取 c++ 中结构中多个枚举的输入
- 为什么 std::cin 不提示用户输入?
- C++ CIN 值返回 0 而不是输入值
- 为什么从 std::cin 读取输入后右括号字符的值有时不是")"?
- 为什么不能通过在错误输入后设置 std::cin.clear() 来使用 std::cin?
- :CIN 不断打印用户在每次循环后输入的内容
- 设置输入(CIN)的超时
- 如何将输入(CIN)字符的用户转换为ASCII代码
- 不能在一行中输入 (cin) 超过 10 个整数,以空格分隔到数组中
- 函数结构数组输入cin问题