以前我在Windows上使用c ++ / c编译器支持#include<conio.h>
头文件,但是在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<conio.h>
头文件,因此我不能在程序中使用getch()函数。
所以我想要一个与getch()
完全相同的函数。我不知道为什么我的编译器不支持头文件#include<conio.h>
在网上搜索之后,我得到了this,其中cin.get();
可能是最接近的等价物,但这两者的区别在于如果我们写getch()它不会显示输入的字符控制台,如果我们使用cin.get()输入一个字符,它会在控制台上显示该字符。我不希望该字符显示在控制台上。
使用getchar()
也会在控制台上显示该字符。
答案 0 :(得分:4)
有许多不同的方法可以更方便地进行此操作。最简单的方法是使用curses:
#include "curses.h"
int main() {
initscr();
addstr("hit a key:");
getch();
return endwin();
}
答案 1 :(得分:0)
有一个主题用以下代码回答这个问题:
#include <stdio.h>
#include <termios.h>
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)的一部分
有关此库的更多参考,请阅读:The header contains the definitions used by the terminal I/O interfaces
我希望它可以帮到你。