Как узнать, какая клавиша была нажата в кодовых блоках? - PullRequest
0 голосов
/ 02 мая 2019

Как отобразить, какая клавиша была нажата?

Я имею в виду, например, если вы нажмете A, на экране отобразится: Вы нажали A.

cin>>keypress;
cout<<"You pressed:"<<keypress;

Я хочу показать, что именноключ я нажимаю.Не дожидаясь нажатия Enter и заканчивая выполнение.

Ответы [ 2 ]

1 голос
/ 06 мая 2019

Я не знаю, возможно ли это, но вы можете захотеть лучшего названия. На первый взгляд кажется, что вы запрашиваете что-то очень простое, но это не так. Кроме того, у меня есть решение для 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") );

0 голосов
/ 02 мая 2019

Я думаю, что вы хотите отобразить символ, что вы нажимаете (как в вашем примере). Итак, все довольно просто. Вот код:

#include <stdio.h>
#include <conio.h>


int main()
{
    char keyPress;
    while(1)
        {
            keyPress=_getch();
            if((keyPress==27)||(keyPress==32))
            {
                printf("You decided to stop the execution of this code.");
                return 0;
            }
            printf("You pressed:%c\n",keyPress);
        }
}

Если вы оставите код таким, какой он есть, программа завершит выполнение после нажатия клавиши esc или пробела. Если вы хотите изменить это, вы можете заменить цифры в: if((keyPress==27)||(keyPress==32)) другими кодами ascii вашей кнопки. Вот все коды ascii: https://ascii.cl/. Если вы хотите завершить программу только одной кнопкой, просто измените значение с if((keyPress==27)||(keyPress==32)) на if(keyPress==27), и теперь программа остановится только на ESC.

...