Cin в моей программе не работает должным образом. Как я могу это исправить?

У меня есть некоторые проблемы с 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;
}

Благодарю.

2

Решение

Вы, кажется, смешиваете несколько идиом. Я не знаю что
_getch() делает, но я не могу себе представить, что это в любом случае
совместим с std::cin; std::cin будет (или может иметь)
читайте вперед, например, читая свой флаг. Вы
не может просто смешивать разные потоки из одного источника.

Что касается конкретной проблемы, которую вы описываете, как только вы вводите
что-то, что не может быть преобразовано в то, что вы читаете,
поток переходит в состояние ошибки (которое вы должны проверить
перед использованием значения), и все операции с ним становятся no-ops
пока не уберешь ошибку (std::istream::clear()). Но это
не собираюсь исправлять другие проблемы. Если вы настаиваете на использовании
что-то вроде _getch()то вам придется использовать его для всех
ваш ввод, создание строки для ввода позиции, и
с помощью std::istringstream преобразовать это. В зависимости от того, что
функция на самом деле, вы также можете иметь дело с вещами
как Backspace, войти и, возможно, даже эхом.

0

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru