У меня есть меню, которое управляется стрелками и на нажатие Enter переходит по нужному пункту. Проблема в том, что все нажатия Enter сохраняются в буфера ввода.
Допустим, после перехода по выбранному пункту пользователем нужно ввести какое либо значение, и из-за сохранения "прошлого" Enter'a у меня просто автоматически вводиться значение '\n'.
Как это можно пофиксить?
Код:
char check(void) { // Обработка нажатий клавиш
while (true) {
std::this_thread::sleep_for(std::chrono::milliseconds(80));
if (GetAsyncKeyState(VK_UP) == -32767)
return VK_UP;
else if (GetAsyncKeyState(VK_DOWN) == -32767)
return VK_DOWN;
else if (GetAsyncKeyState(VK_RETURN) == -32767)
return VK_RETURN;
}
};
while (true) // Обработка клавиш
switch (check()) {
case VK_UP:
// Up
if (presentItem != 0) {
presentItem--;
system("cls");
show(entries, 2, presentItem);
}
break;
case VK_DOWN:
// Down
if (presentItem != 1) {
presentItem++;
system("cls");
show(entries, 2, presentItem);
}
break;
case VK_RETURN:
if (presentItem == 0) {
createList();
system("cls");
firstMenu();
}
else {
createList();
loadList();
system("cls");
firstMenu();
}
break;
}
}
void loadList() {
system("cls");
std::string nameFile;
std::cout << "File: "; // Error - Автоматический ввод '\n'
std::cin >> nameFile;
...
}
Попробуйте использовать
FlushConsoleInputBuffer( GetStdHandle( STD_INPUT_HANDLE ) );
Вызывать следует перед запросом входного буфера std::cin >>
Например я проверял на функции:
void addEntry() {
listStudents* newStudent = new listStudents;
system("cls");
FlushConsoleInputBuffer( GetStdHandle( STD_INPUT_HANDLE ) );
std::cout << "ФИО: "; // Теперь y уже не появляется
std::cin >> newStudent->student.name;
...
P.S. перед каждым std::cin >> вызывать нет нужды, достаточно вызывать перед началом блока ввода, ну т.е. 1 раз на функцию addEntry(). Вызовы std::cin.ignore(...) лучше удалить, т.к. это не совсем то, что надо и может давать не совсем те эффекты, которые нужны.
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости