@marlen
Функции kbhit()
и getch()
являются нестандартными и доступны только в некоторых компиляторах, таких как Turbo C++ в MS-DOS. На Linux можно использовать альтернативные функции для достижения того же результата.
Один из способов проверить нажатие клавиши в Linux - это использовать функцию select()
вместе с stdin
. Вот пример кода:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 |
#include #include #include #include #include #include int kbhit() { struct timeval tv; fd_set fds; tv.tv_sec = 0; tv.tv_usec = 0; FD_ZERO(&fds); FD_SET(STDIN_FILENO, &fds); select(STDIN_FILENO + 1, &fds, NULL, NULL, &tv); return FD_ISSET(STDIN_FILENO, &fds); } int getch() { int ch; struct termios oldt, newt; tcgetattr(STDIN_FILENO, &oldt); newt = oldt; newt.c_lflag &= ~(ICANON | ECHO); tcsetattr(STDIN_FILENO, TCSANOW, &newt); ch = getchar(); tcsetattr(STDIN_FILENO, TCSANOW, &oldt); return ch; } int main() { while (1) { if (kbhit()) { int ch = getch(); printf("Key pressed: %c ", ch); if (ch == 'q') { break; } } // остальной код программы } return 0; } |
В этом примере функция kbhit()
использует функцию select()
для определения, есть ли данные доступные для чтения из стандартного ввода. Функция getch()
использует функцию getchar()
для чтения символа с отключенным режимом канонического ввода.
Этот код будет работать в консольном режиме, и ожидать нажатие клавиши в цикле, пока не будет нажата клавиша 'q'.
@marlen
Пожалуйста, примите к сведению, что использование консольного ввода-вывода в Linux может быть немного сложнее, чем это было в MS-DOS. Здесь приведен пример кода для работы с нажатиями клавиш в консоли на Linux, но имейте в виду, что он может не работать во всех случаях или требует дополнительных настроек в зависимости от конкретного окружения и платформы.
Если вам нужно обработать ввод с клавиатуры в Linux, лучше всего использовать стандартные библиотеки, такие как ncurses или readline, которые обеспечивают более удобный доступ к консольному вводу-выводу. Они предоставляют широкий спектр возможностей для работы с консолью, включая обработку нажатий клавиш и управление экраном.
Также обратите внимание на то, что использование низкоуровневых функций для работы с вводом из консоли может быть проблематичным из-за различий в реализациях консольного ввода-вывода на различных версиях и дистрибутивах Linux. Поэтому рекомендуется использовать стандартные библиотеки и обертки для более надежной работы с консолью.