【问题标题】:How can I validate an integer input [duplicate]如何验证整数输入[重复]
【发布时间】:2016-03-12 05:30:21
【问题描述】:

例如我有代码:

#include <iostream>
using namespace std;

int main()
{
    int test = 0;
    cout << "Please input a number:";

    while(!(cin >> test))
    {
        cout << "Invalid input";
    }

    if(test  == 1)
    {
        cout << "Test is 1";
    }
    else
    {
        // Do something
    }
   return 0;
}

如果我将1abc 输入到测试变量中,即使输入错误,它仍会继续处理if 语句。我怎么能忽略所有输入而只接受其中的纯数字?

【问题讨论】:

标签: c++ validation


【解决方案1】:

您可以使用getlinefind_if_notisdigit 来检查整行是否为有效整数。这将循环直到它读取一个整数:

std::string number;
while (std::getline(std::cin, number) && number.end() !=
       std::find_if_not(number.begin(), number.end(), &isdigit))
    std::cout << "gitgud!";

getline 将读取输入直到换行符,并将其放入字符串中。 find_if_notisdigit 将找到第一个非数字字符。如果没有(意味着它是一个有效的整数),它将返回 end 迭代器。

【讨论】:

  • 谢谢它解决了这个问题,但无论如何不要使用字符串?
  • @CodingisFun 字符串是最简单的方法。您可以使用std::cin.getline 读入char[],或者创建自己的循环来一次读取一个字符,如果您真的想要的话。
猜你喜欢
  • 1970-01-01
  • 2022-09-28
  • 1970-01-01
  • 2012-11-02
  • 2013-05-31
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多