在 Linux 下,您可以通过使用 termios 库自定义 getchar() 函数的行为
#include<stdio.h>
#include <termios.h>
#include <unistd.h>
int my_getchar() {
struct termios old_term, new_term;
int ch;
// 获取当前终端设置
tcgetattr(STDIN_FILENO, &old_term);
// 复制旧终端设置到新设置
new_term = old_term;
// 关闭回显和规范模式
new_term.c_lflag &= ~(ECHO | ICANON);
// 应用新终端设置
tcsetattr(STDIN_FILENO, TCSANOW, &new_term);
// 读取一个字符
ch = getchar();
// 恢复旧的终端设置
tcsetattr(STDIN_FILENO, TCSANOW, &old_term);
return ch;
}
int main() {
int ch;
printf("Press any key to continue...\n");
ch = my_getchar();
printf("You pressed: %c\n", ch);
return 0;
}
这个程序首先获取当前终端设置,然后创建一个新的设置,其中关闭了回显和规范模式。接下来,它将新设置应用于终端,并使用 getchar() 读取一个字符。最后,它恢复旧的终端设置。
这样,当您运行此程序时,它将立即响应您的按键,而不是等待您按下 Enter 键。同时,由于关闭了回显,按键不会显示在屏幕上。