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; }