我对cin有些问题。当我输入一个字符而不是整数时,cin不起作用,之后我甚至无法输入新值。我该怎么办?我已经尝试了fflush(stdin)
struct PersonList
{
Person person;
PersonList* personListPtr;
};
void addPerson(PersonList*& ptr, int position);
void deletePersonList(PersonList* ptr);
int main()
{
PersonList* personListPtr = NULL;
int flag = 0;
int pos = 0;
int i;
while(flag != 27)
{
system("cls");
cout << "1 - add objects\n"
<< "2 - delete objects\n"
<< "ESC - exit\n";
switch(flag)
{
case '1':
cout << "Enter position: ";
**cin >> pos;**
addPerson(personListPtr, pos);
break;
case '2':
break;
case '3':
break;
}
flag = _getch();
}
deletePersonList(personListPtr);
return 0;
}
感谢。
答案 0 :(得分:0)
你似乎在混合几个成语。我不知道是什么
_getch()
确实如此,但我无法想象无论如何
与std::cin
兼容; std::cin
会有(或可能有)
例如,预读,阅读你的旗帜角色。您
不能简单地混合来自同一来源的不同流。
至于你描述的特定问题,一旦你进入
一些无法转化为你正在阅读的东西,
流进入错误状态(您应该检查
在使用值之前,所有操作都变为no-ops
直到你清除错误(std::istream::clear()
)。但那是
不打算解决其他问题。如果你坚持使用
像_getch()
之类的东西,那么你将不得不将它用于所有
你的输入,建立一个输入位置的字符串,和
使用std::istringstream
进行转换。取决于什么
功能实际上,你可能还要处理事情
像退格一样,进入甚至回声。