在C ++中验证二进制输入

时间:2018-12-13 06:18:56

标签: c++ function validation recursion

嗨,我正在尝试验证用户输入以查找1或0的输入。字符串验证部分似乎正常工作,但是任何基于整数的输入都具有控制台窗口接受输入但不跳过if语句的情况。 ,返回输入(maxItems)。这是代码:

int RollingStats::GetOption() 
{
       int maxItems;

        std::cout << "Please enter either to store data individually (0) or as a range(1)" << std::endl;

        std::cin >> maxItems;

        if ((!(std::cin >> maxItems) && maxItems != 0) | (!(std::cin >> maxItems) && maxItems != 1))
        {
            std::cin.clear();

            std::cin.ignore(100, '\n');

            std::cout << "Please enter an input of either 0 or 1" << std::endl;

            GetOption();
        }
            return maxItems;
} 

任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:1)

代码中的一些问题:

  • 使用cin三次(在if之前一次,在if条件下两次)将要求用户输入三次
  • ||条件检查中使用逻辑或(|)而不是按位或(if)。
  • 不检查输入是否为整数

您可以改为执行以下操作:

int RollingStats::GetOption()
{
    int maxItems;
    std::cout << "Please enter either to store data individually (0) or as a range(1)" << std::endl;
    std::cin >> maxItems;

    if(!std::cin.good() || maxItems != 0 && maxItems != 1)
    {
        std::cin.clear();
        std::cin.ignore(100, '\n');
        std::cout << "Please enter an input of either 0 or 1" << std::endl;
        maxItems = GetOption();
    } 
    return maxItems;
}