【问题标题】:Validating user input of a number验证用户输入的数字
【发布时间】:2015-02-18 21:05:04
【问题描述】:

尝试创建一个 while 循环,该循环将重新要求输入正确的输入。在这种情况下,正确的输入需要是一个数字。当我测试它并输入一个非数字答案时,它会结束程序。 while 循环不起作用。

if (variableQuestionsVf == "Yes" || variableQuestionsVf == "yes")
                    {
                        cout << "Input final velocity (in m/s): " ;
                        while (cin >> finalVelocity)
                        {
                            istringstream s(sVf);
                            s >> value;

                            if (value <= 0 || value >= 0) //Validating input for final velocity
                            break;

                            cout << "Please enter final velocity (in m/s): " ;
                        }
                    }

有没有更简单的方法?

【问题讨论】:

  • 我很好奇,为什么人们要制作 1980 年代风格的交互式程序,而从轻分隔文本文件中读取的 C++ 工具更容易重复运行?更好的是在可能的情况下使用argv 与您的程序进行通信。
  • 按数字,你是指一个数字还是任意数字?
  • @tadman 可能是因为我看过的任何初学者的 C++ 书籍都倾向于从这样的 i/o 开始。
  • 对于数字,我的意思是数字 - 已编辑以解决该问题
  • @tadman 我是 C++ 新手,我只是想在空闲时间编写一个程序。它不是最漂亮的代码,也可能不是最有效的,但你必须从某个地方开始,对吧?最后,当我删除所有错误时它会起作用,这对我来说是一个好的开始。

标签: c++ validation while-loop


【解决方案1】:

我认为您正在错误地验证您的输入。尝试做这样的事情:

#include <iostream>
#include <limits>

int main()
{
    int x;
    std::cin >> x;
    while(std::cin.fail())
    {
        std::cin.clear();
        std::cin.ignore(std::numeric_limits<std::streamsize>::max(),'\n');
        std::cout << "Bad entry.  Enter a NUMBER: ";
        std::cin >> x;
    }
}

Source

【讨论】:

  • 感谢您提供的简单解决方案!我调整了代码以适合我的代码,并且效果很好。如果你能解释它是如何工作的,它会变得更好!直到 numeric_limits 我才明白。无论如何,感谢您的帮助!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-06-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-10-17
相关资源
最近更新 更多