Это функция терминала, поэтому, чтобы отключить эту функцию, вам потребуется перенастроить этот терминал. В C ++ это выглядит примерно так:
#include <stdio.h>
#include <unistd.h>
#include <termios.h>
И в любой функции инициализации:
struct termios original_termios, unbuffered_termios;
tcgetattr(STDIN_FILENO, &original_termios);
unbuffered_termios = original_termios;
unbuffered_termios.c_lflag &= ~ICANON;
tcsetattr(STDIN_FILENO, TCSANOW, &unbuffered_termios);
После этого вы можете использовать любой стандартный метод для чтения отдельных байтов из файла stdin (например, fread()
или getch()
). Имейте в виду, что некоторые клавиши отправляют более одного байта при нажатии (например, клавиши курсора).
Когда вы закончите со своими вещами, вы должны восстановить исходные настройки, иначе терминал может вести себя странно даже после завершения вашей программы:
tcsetattr(STDIN_FILENO, TCSANOW, &original_termios);