Потому что вы получаете уведомления как при нажатии клавиш, так и при нажатии клавиш. Кроме того, если вы удерживаете клавишу, вы получите несколько уведомлений о нажатии клавиш.
Простое решение состоит в том, чтобы просто отслеживать уведомления о нажатии клавиш.
Кроме того, не забудьте проверить возвращаемое значение из ReadConsoleInput.
Вместо этого:
while (true)
{
ReadConsoleInput(hInput, &irInput, 1, &InputsRead);
if (irInput.Event.KeyEvent.bKeyDown)
{
continue;
}
switch (irInput.Event.KeyEvent.wVirtualKeyCode)
Это:
while (true)
{
BOOL result = ReadConsoleInput(hInput, &irInput, 1, &InputsRead);
if (!result || irInput.Event.KeyEvent.bKeyDown)
{
continue;
}
switch (irInput.Event.KeyEvent.wVirtualKeyCode)
Если вы хотите, чтобы действие происходило при нажатии клавиши, вам может потребоваться добавить дополнительный код для запоминания состояния клавиши, если вы не хотите, чтобы повторения происходили.