1、 使用 getch 或 getche 函数
getch
和 getche
是非标准库函数,通常在 conio.h
中定义(主要适用于 Windows 环境)。它们的特点是无需按下回车键即可捕获按键。
#include <stdio.h>
#include <conio.h> // Windows 平台特有
int main() {
printf("按下任意键以继续...\n");
char ch = getch(); // 不会显示按下的键
printf("你按下了: %c\n", ch);
// 如果使用 getche,则按下的键会被显示
// char ch = getche();
return 0;
}
2、使用 termios 实现无回车输入(适用于 Unix/Linux)
在 Unix/Linux 环境中,可以通过修改终端设置来实现无回车即时响应。
#include <stdio.h>
#include <termios.h>
#include <unistd.h>
void set_input_mode() {
struct termios t;
tcgetattr(STDIN_FILENO, &t); // 获取终端当前属性
t.c_lflag &= ~(ICANON | ECHO); // 关闭规范模式和回显
tcsetattr(STDIN_FILENO, TCSANOW, &t); // 应用新设置
}
int main() {
set_input_mode(); // 设置无回车模式
printf("按下任意键以继续...\n");
char ch = getchar();
printf("你按下了: %c\n", ch);
return 0;
}
3、使用 kbhit 检测按键(跨平台方案)
也可以使用 kbhit
检测键盘按下事件,这种方式也依赖于 conio.h
或等效的第三方库。
#include <stdio.h>
#include <conio.h>
int main() {
printf("按下任意键检测...\n");
while (1) {
if (kbhit()) { // 检测是否有按键被按下
char ch = getch();
printf("你按下了: %c\n", ch);
break; // 退出循环
}
}
return 0;
}
4、使用跨平台库(如 ncurses)
如果需要跨平台的无回车输入,可以考虑使用 ncurses
库(适用于 Unix/Linux)。
#include <ncurses.h>
int main() {
initscr(); // 初始化 ncurses
noecho(); // 关闭回显
cbreak(); // 启用字符直接输入模式
printw("按下任意键以继续...\n");
int ch = getch(); // 捕获按键
printw("你按下了: %c\n", ch);
refresh(); // 刷新屏幕以显示输出
endwin(); // 退出 ncurses 模式
return 0;
}