【发布时间】:2025-11-30 02:20:02
【问题描述】:
我希望用户输入 1、2、3 或 4,并且只输入这些数字。 我不想要:5、79、4rf、1XXXXX、2!、abc 1234 等
如果我使用'cin >>',那么它会切断输入到类似'2!'到 2 并离开 '!' in 用于下一个输入,因此 getline() 更可取。我列出的代码在技术上是有效的,但是当我在用户输入无效输入后再次要求另一个输入时,会留下额外的输入行。
感谢您的帮助。
bool check = true;
string input;
int choice;
cout << "Please enter 1, 2, 3, or 4:" << endl;
getline(cin, input);
do
{
check = true;
if (input.length() != 1 || !isdigit(input[0]))
{
cout << "error, enter a valid input" << endl;
check = false;
cin.clear();
cin.ignore(INT_MAX, '\n');
getline(cin, input);
}
else
{
choice = stoi(input);
if (!(choice == 1 || choice == 2 || choice == 3 || choice == 4))
{
cout << "error, enter a valid input" << endl;
check = false;
cin.clear();
cin.ignore(INT_MAX, '\n');
getline(cin, input);
}
else
{
check = true;
}
}
} while (check == false);
【问题讨论】:
-
不相关的
choice = stoi(input);在这里有点矫枉过正。你知道你只有一个字符,它是一个数字,所以你可以用choice = input[0] - '0';
标签: c++ validation input