Я пишу простую программу, которая записывает позиции и интервалы между щелчками.Во время настройки пользователь нажимает «ENTER», чтобы добавить новую позицию в список, и «ESC», как только они заканчивают ввод позиций.
Странное поведение, которое я получаю, заключается в том, что другие нажатия клавиш вызывают else if (GetAsyncKeyState(VK_RETURN))
неверно оценивать как истинное.Я предположил, что 'ENTER' для завершения std::cin
задерживался в буфере и вызывал это значение true, однако я думал, что std::cin.get()
и std::cin.ignore
исправят это.
Почему именно эти ключикроме 'ENTER', значение (GetAsyncKeyState(VK_RETURN))
становится истинным?
void initialSetup() {
int temp = 0;
char input;
std::cout << "Unique sleep times? (y/n): ";
std::cin >> input;
std::cin.get();
std::cin.ignore(100, '\n'); // discards the input buffer
// Ask the user for a sleep each time, or use the same
if (input == 'y') {
uniqueSleepBetweenClicks = true;
}
else {
// Sleep times are constant after each click
std::cout << "Constant sleep time between clicks in ms: ";
std::cin >> constSleepBetweenClicks;
std::cin.get();
std::cin.ignore(100, '\n'); // discards the input buffer
}
std::cout << endl;
std::cout << "***********************************" << endl;
std::cout << "* 'ENTER' to set new position *" << endl;
std::cout << "* 'ESC' when done *" << endl;
std::cout << "***********************************" << endl << endl;
// Add new clicks to the sequence
while (_getch()){
Click click;
if (GetAsyncKeyState(VK_ESCAPE)) {
// Escape keypress ends adding new clicks
break;
}
else if (GetAsyncKeyState(VK_RETURN)) {
// Set the click position
GetCursorPos(&click.point);
std::cout << "Position set to (" << click.point.x << "," << click.point.y << ") " << endl;
if (uniqueSleepBetweenClicks) {
std::cout << "Sleep time in ms: ";
std::cin >> click.sleep;
std::cin.get();
std::cin.ignore(100, '\n'); // discards the input buffer
}
else {
click.sleep = constSleepBetweenClicks;
}
// Add to the list
clickList.push_back(click);
}
}
return;
}
EDIT1: замена VK_RETURN
на VK_SPACE
делает программу отлично работающей.Кажется, проблема только в клавише ENTER.