Знаете ли вы альтернативу функции getch()
? потому что это из библиотеки Conio (которая не является стандартной), и я хотел бы знать, есть ли какая-либо стандартная альтернатива для C++.
У меня есть этот код:
do
{
tecla = getch();
} while (tecla != TECLA_ARRIBA && tecla != TECLA_ABAJO && tecla != ENTER);
Я не хочу паузы, я хочу собирать данные, как в примере кода.
Примечание: или, иначе, любой код, эмулирующий функцию?
Я понимаю, что вы хотите читать прямые входы с ключей, минуя входной буфер
std::cin
.В таком случае ответ прост: стандартного способа нет, так как это зависит от используемой операционной системы .
Если вы используете эмуляцию консоли Windows , вы уже знаете, что использовать:
conio.h
Если вы используете графическое приложение, у вас нет выбора, кроме как прибегнуть к системе событий, предоставляемой операционной системой, или к библиотеке самого высокого уровня , которую вы используете.
Наиболее переносимым способом было бы использование библиотеки ncurses . Хотя он родной для систем *nix, его можно использовать в эмуляторах терминала Windows. В главе 11 у
NCURSES Programming HOWTO
васInterfacing with the keyboard
есть полный пример.В качестве последнего варианта, если вы работаете в Linux, вы можете установить клавиатуру в необработанный режим , чтобы получить прямой доступ к генерируемым ею событиям. У вас есть полный пример в
Grab Raw Keyboard Input
.Вы не можете делать то, что хотите. По крайней мере, не из стандарта С++.
C++ не понимает ни клавиатуры, ни консоли, но стандартный ввод и стандартный вывод. Это изменение концепции, хотя оно и может показаться тривиальным, имеет свои последствия:
Единственный вариант, оставшийся вам, — это подтянуть библиотеки, зависящие от ОС, для выполнения этой задачи:
conio.h
(Windows),ncurses
(Linux),pdcurses
(Windows) и т. д.Вы можете воспользоваться
cin.get( );
библиотекойiostream
и предоставить в свое распоряжение объектыcin, cout
.пример: