Получить коды клавиш стрелок клавиатуры - C (СИ)
Формулировка задачи:
#include <conio.h>
#include <stdio.h>
void main()
{
unsigned char g;
do
{
g=getch();
printf("%c %i\n",g,g);
}while(g != '0');
}Решение задачи: «Получить коды клавиш стрелок клавиатуры»
textual
Листинг программы
#define KEYBOARD_READ_OR_WAIT (0x1000)
#define KEYBOARD_READY_TEST (0x1100)
#define KEYBOARD_SHIFT_STATUS (0x1200)
while (iCnt < 2)
{
wStatus = KeyStatus(KEYBOARD_SHIFT_STATUS);
if (wStatus != wOldStatus)
{
DisplayStatus();
wOldStatus = wStatus;
}
if (KeyStatus(KEYBOARD_READY_TEST))
{
// Key Pressed
wKey = KeyStatus(KEYBOARD_READ_OR_WAIT);
ClearInput();
if (wKey == KEY_ESC)
{
++iCnt;
}
else
{
iCnt = 0;
}
...
Объяснение кода листинга программы
- В начале кода определяются несколько констант, которые представляют собой коды клавиш стрелок клавиатуры:
#define KEYBOARD_READ_OR_WAIT (0x1000)#define KEYBOARD_READY_TEST (0x1100)#define KEYBOARD_SHIFT_STATUS (0x1200)
- Затем следует цикл
while, который выполняется до тех пор, пока счетчикiCntменьше 2:wStatus = KeyStatus(KEYBOARD_SHIFT_STATUS);- Если текущее состояние клавиш отличается от предыдущего, то вызывается функция
DisplayStatus(), которая выводит текущее состояние клавиш на экран. Затем переменнаяwOldStatusобновляется текущим состоянием клавиш. - Если готова к нажатию клавиша теста готовности клавиатуры (
KeyStatus(KEYBOARD_READY_TEST) == 1), то выполняются следующие действия:wKey = KeyStatus(KEYBOARD_READ_OR_WAIT);- Вызывается функция
ClearInput(), которая, вероятно, очищает буфер ввода. - Если значение переменной
wKeyравноKEY_ESC, то счетчикiCntувеличивается на 1. - В противном случае, счетчик
iCntсбрасывается в 0.
- Код не завершается в предоставленном фрагменте, поэтому неизвестно, что происходит после этого.