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接口使用的定义
我希望它对你有所帮助。