2

我对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;
}

谢谢。

4

1 回答 1

0

你似乎混合了几个成语。我不知道是什么 _getch(),但我无法想象它无论如何兼容std::cin; std::cin例如,将(或可能)提前阅读,阅读您的标志字符。您不能简单地混合来自同一来源的不同流。

至于您描述的特定问题,一旦您输入了无法转换为您正在阅读的内容的内容,流就会进入错误状态(您应该在使用该值之前对其进行检查),并且对其进行的所有操作都将变为 no-操作直到您清除错误 ( std::istream::clear())。但这并不能解决其他问题。如果您坚持使用类似的东西_getch(),那么您将不得不将它用于您的所有输入,为位置输入构建一个字符串,并使用std::istringstream它来转换它。根据函数实际执行的操作,您可能还必须处理退格、回车甚至回显等操作。

于 2012-12-10T20:13:00.967 回答