我在程序的某些输入区域遇到了一些问题。用户输入特定整数的部分内容。即使他们输入了一个非常精细和花花公子的错误,但我注意到如果他们输入的内容不是像'm'这样的整数类型,那么它会重复循环错误信息。
我有几个函数,其中包含整数输入。这是一个例子。
void Room::move(vector<Room>& v, int exone, int extwo, int exthree, int current)
{
v[current].is_occupied = false;
int room_choice;
cout << "\nEnter room to move to: ";
while(true)
{
cin >> room_choice;
if(room_choice == exone || room_choice == extwo || room_choice == exthree)
{
v[room_choice].is_occupied = true;
break;
}
else cout << "Incorrect entry. Try again: ";
}
}
[解决]
void Room::move(vector<Room>& v, int exone, int extwo, int exthree, int current)
{
v[current].is_occupied = false;
int room_choice;
cout << "\nEnter room to move to: ";
while(true)
{
cin >> room_choice;
if(room_choice == exone || room_choice == extwo || room_choice == exthree)
{
v[room_choice].is_occupied = true;
break;
}
else if(cin.fail())
{
cin.clear()
cin.ignore()
cout << "Incorrect entry. Try again: ";
}
}
}
答案 0 :(得分:10)
您的“已解决”代码中仍然存在问题。您应该在检查值之前检查fail()。 (显然,与格式问题相反,存在eof()和IO故障的问题。)
习惯性阅读
if (cin >> choice) {
// read succeeded
} else if (cin.bad()) {
// IO error
} else if (cin.eof()) {
// EOF reached (perhaps combined with a format problem)
} else {
// format problem
}
答案 1 :(得分:6)
您可以使用cin.good()
或cin.fail()
来确定cin是否可以成功处理所提供的输入值。如有必要,您可以使用cin.clear()
清除错误状态,然后再继续处理。
答案 2 :(得分:1)
为了更简单的方法,您可以像这样使用!
运算符:
if ( !(cin >> room_choice) )
{
cin.clear();
cin.ignore();
cout << "Incorrect entry. Try again: ";
}