Я не знаю, возможно ли это, но вы можете захотеть лучшего названия. На первый взгляд кажется, что вы запрашиваете что-то очень простое, но это не так.
Кроме того, у меня есть решение для Windows, использующее Windows API.
#include <wInDoWs.h>
.
Вы можете использовать GetAsyncKeyState()
и передать ему значение ASCII для ключа. Будет возвращено короткое сообщение с указанием статуса кнопки. Насколько мне известно, значение -32767 возвращается при нажатии кнопки. Оберните это в функцию, и вы сможете определить, нажата ли кнопка. (ниже будет работать с копией / вставкой.)
#include <windows.h>
#include <iostream>
bool pressed(const short& _key)
{
short state = 0;
short pressed= -32767;
state = GetAsyncKeyState( _key);
return ( state == pressed );
}
int main()
{
//see if J is pressed
while(1)
{
if(pressed( 0x4a ) )// 'J'
std::cout << "J";
}
}
Чтобы это работало со всеми символами, боюсь, я не могу придумать более простой способ, чем сохранить все значения ASCII и то, что вы хотите распечатать, если клавиша нажата, в контейнере и проверить их нажата статус каждый кадр. (ниже просто псевдокод.)
//the container this short is the 'key'
std::vector< std::pair< short , std::string > > chars;
//to check the status
for(auto& c : chars)
if( pressed( c.first ) ) std::cout << c.second;
Я бы поставил это в какой-то цикл.
Добавление слова «Вы нажали пробел» таким образом не составило бы труда.
просто сделай
chars.push_back( std::pair<int,std::string>(0x20 , "Spacebar") );