HY,
我想用cin函数读取c ++中的数字。我知道有很多线程,但我没有找到一个完美的解决方案。
首先我尝试使用 cin.fail()函数。但是如果我输入一个像 12asdf 这样的数字,它会读取 12 正确并且没有抛出错误。
然后我尝试读取一个字符串并使用 atoi()函数进行转换,但如果我读了这样的字符串 12asdf ,我遇到了同样的问题。它读取12正确并且没有错误。
我尝试使用该功能,但在visual 2013中无法使用all_of功能。
if ( std::all_of(input.begin(), input.end(), std::isdigit) )
{
//input is integer
}
如何查看 12asdf 之类的输入并抛出错误?
祝你好运
答案 0 :(得分:2)
您可以使用以下功能:
bool is_number(const std::string& s) {
return !s.empty() && std::find_if(s.begin(),
s.end(), [](char c) { return !std::isdigit(c); }) == s.end();
}
然后像下面这样使用它:
std::string num;
std::cout << "Enter number: ";
std::getline(std::cin, num);
while (!is_number(num)) {
std::cout << "Input is not a number , enter again: ";
std::cin.clear();
std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
num.clear();
std::getline(std::cin, num);
}