Fak*_*ken 2 c++ validation stl
我正在尝试使用以下代码块在小型 C++ 程序中过滤掉无效的用户输入:
int selection = -1;
while (!(selection >= 1 && selection <=4))
{
cin >> selection;
if (!(selection >= 1 && selection <=4))
{
cout << "invalid selection!" << endl;
cout << "selection: ";
}
}
Run Code Online (Sandbox Code Playgroud)
当我输入任何在我想要过滤的范围内或外的数值时,它似乎工作正常。但是,当我输入无效值(例如大于最大可存储 int 或字符的值)时,会发生奇怪的事情。代码循环并跳过“cin”命令。
我该如何解决?
谢谢
在读入新的输入尝试之前,您需要使用检测不可转换的输入fail(),然后忽略其余的坏数据并cin使用重置错误标志clear()。
int selection = -1;
while (!(selection >= 1 && selection <=4))
{
cin >> selection;
if (cin.fail() || !(selection >= 1 && selection <=4))
{
cout << "invalid selection!" << endl;
cout << "selection: ";
cin.clear();
cin.ignore(std::numeric_limits<int>::max(), '\n');
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6379 次 |
| 最近记录: |