@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'.