Чтение клавиш со стрелками с переполнением стека

Я пишу приложение C ++ и должен читать, нажата ли клавиша со стрелкой или нет.
Я нашел только некоторые функции, которые работают только на Windows.

0

Решение

У вас такая проблема, потому что вы просто задаете неправильный вопрос. Если ваше приложение является инструментом командной строки и доступно из терминала, то просто невозможно узнать, какие клавиши нажаты в данный момент, потому что терминал может находиться далеко от компьютера, на котором работает ваше приложение, и что более важно, есть нет никакой причины, чтобы терминал отправлял вам нажатия клавиш со стрелками, потому что терминал может использовать их для текстовой навигации.

Так что вы можете искать, как заставить терминал отправлять вам нажатия клавиш. Не каждый терминал будет поддерживать его, но я думаю, что большинство современных терминалов в современных ОС поддерживают его.

Если у вас есть приложение с графическим интерфейсом, которое предназначено для локального запуска и предполагает, что вы управляете им с подключенной клавиатуры. Затем вам следует поискать документацию для своего инструментария GUI. (Qt, wxWidgetsсырье xorgWindows API и т. д.)

Так что для этой проблемы просто нет собственного решения C ++, потому что ваш вопрос просто не имеет смысла во многих ситуациях.

Таким образом, вы можете использовать некоторые консольные библиотеки, такие как ncurses или GUI инструментарий, как Qt или найдите собственное решение в вашей конкретной ситуации, но не ожидайте, что этот последний способ будет работать без дополнительного кода на других машинах.

Или просто найдите другие библиотеки, которые могут позволить вам это сделать.

1

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

Поскольку вы говорите, что нашли материал только для Windows, я предполагаю, что вы ищете способ Linux-Unix. Старые динозавры, такие как я, помнят время, когда у нас была только правда консоли (только клавиатура и дисплей 80х25). И в эти ранние времена существовали низкоуровневые библиотеки для интерпретации передаваемых с клавиатуры клавиш и позиционирования курсора на экране практически на любом терминале, а также высокоуровневые библиотеки для использования экрана в качестве (только текстового) графического интерфейса пользователя.

Вы должны искать curses или же ncurses для библиотек высокого уровня и terminfo для возможностей низкого уровня.

1