[英]cin in my program doesn't work properly. How can I fix it?
我的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;
}
谢谢。
您似乎混合了一些习惯用法。 我不知道_getch()
作用,但是我无法想象它与std::cin
兼容; std::cin
将std::cin
(或可能已经)阅读,例如阅读您的标志字符。 您不能简单地混合来自同一来源的不同流。
至于您描述的特定问题,一旦输入了无法转换为您正在读取的内容,流就会进入错误状态(在使用该值之前应检查该错误状态),并且对它的所有操作都将变为-直到您清除错误( std::istream::clear()
)。 但这并不能解决其他问题。 如果您坚持使用_getch()
类的东西,则必须将其用于所有输入,为位置的输入建立一个字符串,并使用std::istringstream
进行转换。 根据函数的实际作用,您可能还必须处理诸如退格,输入甚至回声之类的问题。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.