Cin读取数字并检查整数

时间:2014-06-04 15:50:48

标签: c++ numbers integer

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 之类的输入并抛出错误?

祝你好运

1 个答案:

答案 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);
  }