Top.Mail.Ru
Ответы
Аватар пользователя
5лет
Изменено
Аватар пользователя
Аватар пользователя
Аватар пользователя
Программирование
+3

Как проверить нажатие клавиши C++?

То есть у меня есть цикл, и он должен выполнятся до тех пор пока нажимается определенная клавиша.

Дополнен

через cin проверять не охота, т. к надо ввести число, потом еще нажимать enter

Дополнен

А мне надо чтобы я ввел клавишу и цикл сразу выполнился, причем эта клавишу переменная, то есть на экране при нажатии не должен быть виден

Дополнен

причем эта клавишу НЕ переменная*

Дополнен

Говорю еще раз для непонятливых. Вариант, через cin и char не подходит, т. к надо это самое char ВВЕСТИ в консоль и это самая char будет ОТОБРАЖАТЬСЯ в консоли. А мне надо, чтобы клавиша как кнопка перезапуска работала, в консоли не должно быть ничего лишнего, нажал клавишу цикл выполнился.

По дате
По рейтингу
Аватар пользователя
Новичок
5лет

В Windows можно сделать так:

WCHAR ReadChar(HANDLE hInput) {
INPUT_RECORD rec; DWORD t;
while (ReadConsoleInput(hInput, &rec, 1, &t)) {
if (rec.EventType != KEY_EVENT) continue;
if (rec.Event.KeyEvent.bKeyDown) return rec.Event.KeyEvent.uChar.UnicodeChar;
}
return 0;
}

Функция ожидает нажатия клавиши и возвращает введённый символ (без его отображения в консоли) или 0 в случае ошибки. Можно также возвращать простой однобайтовый char используя rec.Event.KeyEvent.uChar.AsciiChar или виртуальный код клавиши используя rec.Event.KeyEvent.wVirtualKeyCode.

Если же нужно просто проверить состояние конкретной клавиши (т. е. без ожидания её нажатия), то используй функцию GetAsyncKeyState.

Аватар пользователя
Мудрец
5лет

Ваша задача не имеет однозначного переносимого решения и не имеет никакого отношения к С++. Посмотрите эту программу, используемую там технику можно попробовать подогнать под ваш случай: https://pastebin.com/GzyuJBi4

Аватар пользователя
Ученик
5лет

через ascii коды наверное