Захват нажатия клавиш в C++

Я немного читал и вижу, что могу использовать getch(), чтобы получить нажатие клавиши. Я видел, что это считается плохой практикой, однако я видел противоречивые мнения. Я пишу консольное приложение для своего класса и хотел бы иметь возможность перемещать маркер (*) по экрану на основе нажатых клавиш со стрелками. Является ли getch() правильным способом для этого, или есть лучший способ перехватить это. Я хочу, чтобы они просто могли нажимать стрелку, а не нажимать ввод или что-то еще. Мне не нужен конкретно код, я просто хочу знать, должен ли я избегать getch(), и если да, какие функции существуют для этого типа идеи.

4 ответа

Решение

getch() не является стандартной функцией в C или C++. Он встречается в некоторых устаревших компиляторах, таких как Turbo C, и также определяется в некоторых обычно используемых библиотеках, таких как curses, но в любом случае это функция C, а не C++. Для C++ вам, вероятно, следует просто придерживаться стандартного ввода-вывода C++. Если вы по какой-то причине не можете этого сделать, выберите самый переносимый вариант, например, curses.

Вы хотите читать с терминала в неканоническом режиме. Используйте tcsetattr(), чтобы отключить флаг ICANON.

В Windows вы можете использовать pdcurses: http://pdcurses.sourceforge.net/, который совместим с ncurses.

Используйте getch(), если это работает. Почему бы и нет?

Другие вопросы по тегам