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

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


person Bear    schedule 18.11.2010    source источник


Ответы (4)


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

person Paul R    schedule 18.11.2010
comment
существует ли стандартный способ С++ для захвата нажатий клавиш по мере их ввода, или С++ всегда требует буферизации ввода? - person Bear; 19.11.2010
comment
@bear: нет, в стандарте С++ такого нет - person smerlin; 19.11.2010
comment
Я думаю, что любое решение либо будет зависеть от ОС, либо потребует библиотеки, такой как curses или ncurses. - person Paul R; 19.11.2010

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

person John Gordon    schedule 18.11.2010

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

person TonyK    schedule 18.11.2010

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

person Luis G. Costantini R.    schedule 19.11.2010