简单的用户输入验证不起作用

时间:2015-11-02 04:15:31

标签: c++ input

如果没有输入这两个数字,我有一个接受1或2的简单函数和重新输入。现在,如果我输入任何数字,它仍然要求有效输入。我知道这很容易,但我现在还没有看到它。我错过了什么?

CREATE OR REPLACE TRIGGER updateotMark
BEFORE UPDATE
ON sBookBorrow
FOR EACH ROW
  WHEN (SYSDATE - NEW.etime > 15)
BEGIN
   :NEW.otmark := 1;
END;

3 个答案:

答案 0 :(得分:1)

while条件更改为

while( (input != 1 && input !=2) || cin.fail())

答案 1 :(得分:1)

while中的条件未正确形成。它将永远是真的。

您需要使用以下内容:

while ( !cin || (input != 1 && input != 2) )

建议更改策略

我认为使用递归函数会更好:

int userChoice()
{
   int input = 0;
   cout << "Enter 1 or 2: ";
   cin >> input;

   // If we get a valid input, return.
   if ( cin && (input == 1 || input == 2))
   {
      return input;
   }

   // If there is any error in reading, clear the stream.
   if ( !cin )
   {
      cin.clear();
      cin.ignore(1000, '\n');
   }

   // Call function again.
   return userChoice();
}

答案 2 :(得分:0)

使用&amp;&amp;不是||

#include <iostream>
#include <string>

using namespace std;

int userChoice();

int main()
{
  userChoice();

  return 0;
}

int userChoice()
{
    int input = 0;

    cout << "Enter 1 or 2: ";
    cin >> input;

    while ((input != 1) && (input != 2))
    {
        if (cin.fail())
        {
            cin.clear();
            cin.ignore(1000, '\n');
        }

        cout << "Enter only 1 or 2: ";
        cin >> input;
    }

    return input;
}