Я немного почитал и вижу, что могу использовать getch() для получения нажатия клавиши. Я видел, что это считается плохой практикой, однако я видел противоречивые мнения. Я пишу консольное приложение для своего класса и хотел бы иметь возможность перемещать маркер (*) по экрану на основе нажатых клавиш со стрелками. Является ли getch() правильным способом сделать это, или есть лучший метод для его захвата. Я хочу, чтобы они просто могли нажать стрелку, не нужно было нажимать ввод или что-то в этом роде. Мне не нужен конкретный код, я просто хочу знать, следует ли мне избегать getch(), и если да, то какие функции существуют для такого типа идей.
Захват нажатия клавиши в C++
Ответы (4)
getch()
не является стандартной функцией ни в C, ни в C++. Он присутствует в некоторых устаревших компиляторах, таких как Turbo C, а также определен в некоторых часто используемых библиотеках, таких как как curses, но в любом случае это функция C, а не C++. Для С++ вам, вероятно, следует просто придерживаться стандартного ввода-вывода С++. Если вы не можете сделать это по какой-либо причине, выберите наиболее портативный вариант, например. проклятия.
person
Paul R
schedule
18.11.2010
существует ли стандартный способ С++ для захвата нажатий клавиш по мере их ввода, или С++ всегда требует буферизации ввода?
- person Bear; 19.11.2010
@bear: нет, в стандарте С++ такого нет
- person smerlin; 19.11.2010
Я думаю, что любое решение либо будет зависеть от ОС, либо потребует библиотеки, такой как 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