C语言 不按回车键读取单个字符

C语言中,getchar() 会等待用户按下回车键后才会读取一个字符,而如果想避免这种情况,可以通过不同的方式来实现。在某些平台上,可以使用 getch() 或 getche() 来避免按回车键。对于 UNIX/Linux 系统,可以使用 termios 库来直接读取单个字符而不需要回车。在特定环境中(如 Turbo C),可以使用 kbhit() 来检测键盘输入。

1、使用 getch() 或 getche()

getch()getche() 是在某些 C 编译器中(例如 Borland C、Turbo C)提供的功能,它们可以从键盘获取单个字符,而不需要按下回车键。

#include <conio.h>

int main() {
    char ch;
    ch = getch();  // 获取一个字符,按键后立即返回
    printf("You pressed: %c\n", ch);
    return 0;
}

2、使用 termios 库(适用于 UNIX/Linux 系统)

在 UNIX/Linux 系统中,可以使用 termios 库来禁用回车键,实时读取字符。

#include <stdio.h>
#include <unistd.h>
#include <termios.h>

char getch(void) {
    struct termios oldt, newt;
    char ch;
    
    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() {
    char ch;
    printf("Press a key: ");
    ch = getch();  // 获取单个字符
    printf("\nYou pressed: %c\n", ch);
    return 0;
}

3、使用 kbhit()(适用于某些特定环境)

在 Turbo C 或一些特定的环境中,可以使用 kbhit() 函数来检测是否有按键被按下。

#include <conio.h>

int main() {
    char ch;
    printf("Press a key: ");
    while (!kbhit()) {
        // 等待用户按下键
    }
    ch = getch();  // 获取单个字符
    printf("\nYou pressed: %c\n", ch);
    return 0;
}

推荐阅读
cjavapy编程之路首页