У меня есть меню, которое управляется стрелками и на нажатие 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(...)
лучше удалить, т.к. это не совсем то, что надо и может давать не совсем те эффекты, которые нужны.
Виртуальный выделенный сервер (VDS) становится отличным выбором
cout не ключевое словоОн подключается через библиотеку iostream и сам редактор vs говорит что это функция
Мне нужна структура данных, которая каждой строке будет ставить в соответствие некоторую callback-функциюЭта структура будет инициализироваться...
Где subset1 и subset2 - это вектора подмножеств первой и второй половины множества соответственно