在C或C++中,从标准输入中读取字符的最佳方法是什么?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (20)

在C或C++中,从标准输入中读取字符的最佳方法是什么?(无需按Enter键)

提问于
用户回答回答于

在纯粹的C ++中是不可能的,它太依赖于可能与stdin连接的终端。但是,可以为此使用一个库:

  1. conio可用于Windows编译器。使用该功能_getch()提供一个character,无需等待回车键。
  2. curses可用于Linux,兼容curses实现也可用于Windows。它也有一个getch功能。请参阅维基百科的Curses

用户回答回答于

在Linux(和其他类Unix系统)上,可以通过以下方式完成:

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

char getch() {
        char buf = 0;
        struct termios old = {0};
        if (tcgetattr(0, &old) < 0)
                perror("tcsetattr()");
        old.c_lflag &= ~ICANON;
        old.c_lflag &= ~ECHO;
        old.c_cc[VMIN] = 1;
        old.c_cc[VTIME] = 0;
        if (tcsetattr(0, TCSANOW, &old) < 0)
                perror("tcsetattr ICANON");
        if (read(0, &buf, 1) < 0)
                perror ("read()");
        old.c_lflag |= ICANON;
        old.c_lflag |= ECHO;
        if (tcsetattr(0, TCSADRAIN, &old) < 0)
                perror ("tcsetattr ~ICANON");
        return (buf);
}

扫码关注云+社区