While循环中的C++cin输入验证



除了一个小问题外,我的代码大部分都能正常工作。虽然它应该只接受int,但它也接受以int开头的用户输入,例如6abc。我在这里看到了一个修复程序,但它将输入类型更改为字符串,并添加了更多的代码行。我想知道是否有更简单的方法来解决这个问题:

int ID;
cout << "Student ID: ";
// error check for integer IDs
while( !( cin >> ID )) {
cout << "Must input an integer ID." << endl ;
cin.clear() ; 
cin.ignore( 123, 'n' ) ; 
}

在一个词中-不。

但你可以做的是先把整个单词读成std::string,然后把整个单词转换成int,检查转换中的错误,例如:

int ID;
string input;
do
{
cout << "Student ID: ";
if (!(cin >> input))
{
cin.clear();
cin.ignore(numeric_limits<streamsize>::max(), 'n');
}
else
{
size_t pos = 0;
try
{
ID = stoi(input, &pos);
if (pos == input.size())
break;
}
catch (const std::exception &) {}
}
cout << "Must input an integer ID." << endl;
}
while (true);

实时演示

相关内容

  • 没有找到相关文章

最新更新