首页 文章

Cin读取数字并检查整数[重复]

提问于
浏览
0

这个问题在这里已有答案:

HY,

我想用cin函数读取c中的数字 . 我知道有很多线程,但我没有找到一个perfekt解决方案 .

首先我用 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 回答

  • 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);
      }
    

相关问题