我对编程相当陌生,我正在尝试过滤输入cin
(没有特别的原因;这是我现在知道的唯一输入法),这样一个人只能输入 1-10 并获得“正数”回复。这是我的代码:
#pragma region Check cin is a valid input (an integer between 1 and 10, not a string or number out of range)
int input;
bool valid2=false;
while (!valid2)
{
cout << "Enter an integer (1-10): ";
cin >> input;
if (!cin || input > 10 || input < 1)
{
cout << "Error: Invalid. Try again." << endl << endl;
cin.ignore(numeric_limits<streamsize>::max());
cin.clear();
}
else
{
valid2 = true;
}
}
#pragma endregion
忽略“pragma”,我有一个测试脚本,每个小实验都有块,以节省我的时间,这就是我在它们不再有效时折叠它们的方式。
我的问题(除其他外)是当我输入一个非整数时f
,它会无限循环"Error: Invalid. Try Again"
,我不知道为什么。我想也许自从被定义后,它回来时input
就跑过去了。cin
但我检查了一个孤立的例子,cin
让我input
在继续之前专门重新定义。
侧边栏:说到pragma
,有没有人在 c++ 中有更好的方法?除了制作单独的方法之外,因为我的大多数测试都可以在main
.
编辑:
我已经切换cin.ignore(...)
,cin.clear()
现在程序可以正确过滤输入;但是现在,它根本不会循环回来。给我之后"Error: Invalid. Try again."
,它挂在应该再次要求我输入整数的地方。