除了一个小问题外,我的代码大部分都能正常工作。虽然它应该只接受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);
实时演示