例如,如果我输入“2a”,它不会显示错误,也不会要求用户重新输入该值。我该如何解决?
while (std::cin.fail())
{
std::cout << "ERROR, enter a number" << std::endl;
std::cin.clear();
std::cin.ignore(256,'\n');
std::cin >> dblMarkOne;
}
std::cout << "" << std::endl;
两种可能的解决方案:
- 首先将输入存储在 std::string 中,而不是直接存储在 int 中。然后,使用 strtol from 转换为整数。如果endPtr指向0,则意味着最后什么都没有剩下,所以这是可以的。否则会发现末尾有一些无数字的字符
- 在你的例子中,
std::cin >> dblMarkOne;
将留下非数字字符std::cin
,因此如果仍有可用数据std::cin
之后,例如使用std::cin.peek()!=EOF
,这意味着用户输入了多个数字。
编辑:完整测试的代码:
#include <iostream>
#include <cstdio>
int main(int argc, char ** argv)
{
bool ok = false;
int dblMarkOne;
std::cout << "Enter a number" << std::endl;
while (!ok)
{
std::cin >> dblMarkOne;
if(!std::cin.fail() && (std::cin.peek()==EOF || std::cin.peek()=='\n'))
{
ok = true;
}
else
{
std::cin.clear();
std::cin.ignore(256,'\n');
std::cout << "Error, Enter a number" << std::endl;
}
}
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)