Я новичок в программировании на C. Ради интереса я начал с попытки создать небольшую игру, в которой игрок представлен буквой, которую можно перемещать в окне консоли.
Одним из первых препятствий, с которыми я столкнулся, было отсутствие стандартного способа чтения символов с клавиатуры в C без ожидания нажатия пользователем клавиши Enter.
Конечно, в заголовочном файле conio.h есть функция Getch(), но я бы предпочел использовать Windows API, так как все равно буду работать под этой ОС. Погуглив, я обнаружил, что GetKeyState будет лучшей функцией для этого приложения (поскольку это консольное приложение, я не могу использовать WM_KEYDOWN, верно?).
Это то, что у меня есть до сих пор:
#include <stdio.h>
#include <windows.h>
#define BITS sizeof(short) * 8
const short MSB = 1 << (BITS - 1);
char get_char(void);
int main(void)
{
char c;
while (1)
{
if (c = get_char()) printf("|%d|%c|\n", c, c);
}
return 0;
}
char get_char(void)
{
int i = 0;
while (i++ < 256) // All keys on the keyboard
{
if (GetKeyState(i) & MSB)
{
while (1) // Waits until the pressed key goes up again
{
if (!(GetKeyState(i) & MSB)) return i;
}
}
}
return 0;
}
Проблема, с которой я сталкиваюсь, заключается в том, что функция get_char() не возвращает правильный символ. Например, когда я нажимаю «а» на клавиатуре, printf отображает «А».
Я понимаю, что GetKeyState работает с виртуальными ключами (не ASCII), но есть ли способ заставить функцию get_char() возвращать два значения, одно VK и одно ASCII-значение?
conio.h
на самом деле также не является стандартным заголовком C; это эксклюзивно для DOS и Windows. - person Govind Parmar   schedule 09.11.2018_getch()
и переходите к чему-то более интересному. - person IInspectable   schedule 09.11.2018