如果没有输入这两个数字,我有一个接受1或2的简单函数和重新输入。现在,如果我输入任何数字,它仍然要求有效输入。我知道这很容易,但我现在还没有看到它。我错过了什么?
CREATE OR REPLACE TRIGGER updateotMark
BEFORE UPDATE
ON sBookBorrow
FOR EACH ROW
WHEN (SYSDATE - NEW.etime > 15)
BEGIN
:NEW.otmark := 1;
END;
答案 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;
}