как обнаружить стрелки

Я создал приложение для обнаружения нажатия клавиш вверх и вниз на клавиатуре
но ничего не будет напечатано после нажатия этих клавиш.

Я использую Visual C ++ 2010

    #include <iostream>
#include <conio.h>
using namespace std;

void main()
{
char x;

while(1)
{

x = getch();
if(x==0 || x==224)
{
x=getch();
if(x==80)
{
cout << "down"<<endl;
}else if(x==72)
{
cout << "up"<<endl;
}
}//if x==0 || x=224
}//while1
}//main

В чем может быть проблема?

Спасибо

0

Решение

Используйте kbhit (), чтобы получить клавиши со стрелками на клавиатуре

1

Другие решения

Просто чтобы ответить, почему это не работает: вы пытаетесь использовать ввод своего пользователя как неподписанный. Ваша символьная переменная подписана, поэтому значение отличается от ожидаемого. 224 без знака является подписанным -32.

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

void main()
{
char x;

while(true)
{
while(!kbhit()){}
x = getch();

if(x==0 || x==-32)
{
x=getch();
if(x==80)
{
cout << "down"<<endl;
}else if(x==72)
{
cout << "up"<<endl;
}
}//if x==0 || x=224
}//while1
}//main

Программа все равно будет зацикливаться вечно. Затем следующий цикл, который я добавил, продолжит цикл, пока нет нажатых клавиш (буферизованных). Затем getch () получает следующий символ из буфера. Теперь проблема, с которой вы столкнулись, состоит в том, что у вас было 224 (0xE0), что технически правильно. Однако в двоичном коде -32 и 224 выглядят одинаково.

Сначала я столкнулся с той же проблемой, я не мог понять, почему мой код не попал в правильный блок кода, и это потому, что первый символ был на самом деле -32 (0xE0)

Надеюсь, что это поможет, несмотря на то, что это действительно старый вопрос.

1

Вы можете использовать curses.h библиотека. Прочитайте их руководство, и это должно быть очень легко оттуда.
После того, как вы принимаете ввод getch() (сохраните ввод в int, а не в символ), вы можете проверить, является ли это одна из клавиш со стрелками, используя определенные коды клавиш. Просто убедитесь, что вы использовали keypad(stdscr, TRUE) до того, как программа сможет распознавать клавиши со стрелками.

1