Linux等效于conio.h getch()

以前我在Windows上使用c ++ / c编译器,它们支持#include头文件,但是在linux上我有

 gcc (Debian 4.9.2-10) 4.9.2 Copyright (C) 2014 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 

编译器。 这不支持#include头文件,因此我不能在程序中使用getch()函数。

所以我想要一个与getch()完全相同的函数。 我不知道为什么我的编译器不支持头文件#include

在网上搜索后我得到了这个说cin.get(); 可能是最接近的等价物,但是这两个是不同的,如果我们写getch()它不显示在控制台上输入的字符,而如果我们使用cin.get()输入一个字符,它会在控制台上显示该字符。 我不希望该字符显示在控制台上。

使用getchar()还会在控制台上显示该字符。

有许多不同的方法可以更方便地执行此操作。 最简单的是使用curses :

 #include "curses.h" int main() { initscr(); addstr("hit a key:"); getch(); return endwin(); } 

有一个线程使用以下代码回答此问题:

 #include  #include  char getch() { char buf = 0; struct termios old = { 0 }; fflush(stdout); if (tcgetattr(0, &old) < 0) perror("tcsetattr()"); old.c_lflag &= ~ICANON; // local modes = Non Canonical mode old.c_lflag &= ~ECHO; // local modes = Disable echo. old.c_cc[VMIN] = 1; // control chars (MIN value) = 1 old.c_cc[VTIME] = 0; // control chars (TIME value) = 0 (No time) if (tcsetattr(0, TCSANOW, &old) < 0) perror("tcsetattr ICANON"); if (read(0, &buf, 1) < 0) perror("read()"); old.c_lflag |= ICANON; // local modes = Canonical mode old.c_lflag |= ECHO; // local modes = Enable echo. if (tcsetattr(0, TCSADRAIN, &old) < 0) perror ("tcsetattr ~ICANON"); return buf; } 

它使用termios驱动程序接口库,它是POSIX(IEEE 1003.1)的一部分

有关此库的更多参考,请参阅: 标头包含终端I / O接口使用的定义

我希望它对你有所帮助。