如何在Linux中实现C的getch()函数?

Hit*_*its 17 c gcc getch conio

在TurboC++中,我可以使用getch()函数conio.h.但是在Linux中,gcc没有提供conio.h.我怎样才能获得功能getch()

小智 27

试试这个conio.h文件:

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

/* reads from keypress, doesn't echo */
int getch(void)
{
    struct termios oldattr, newattr;
    int ch;
    tcgetattr( STDIN_FILENO, &oldattr );
    newattr = oldattr;
    newattr.c_lflag &= ~( ICANON | ECHO );
    tcsetattr( STDIN_FILENO, TCSANOW, &newattr );
    ch = getchar();
    tcsetattr( STDIN_FILENO, TCSANOW, &oldattr );
    return ch;
}

/* reads from keypress, echoes */
int getche(void)
{
    struct termios oldattr, newattr;
    int ch;
    tcgetattr( STDIN_FILENO, &oldattr );
    newattr = oldattr;
    newattr.c_lflag &= ~( ICANON );
    tcsetattr( STDIN_FILENO, TCSANOW, &newattr );
    ch = getchar();
    tcsetattr( STDIN_FILENO, TCSANOW, &oldattr );
    return ch;
}
Run Code Online (Sandbox Code Playgroud)

你也可以在gcc中使用ncurses库来获得类似的一些函数conio.h.


Jam*_*ong 7

看看诅咒:

http://en.wikipedia.org/wiki/Curses_%28programming_library%29

  • 我贬低了这一点,因为它只是一个链接答案,而且,就目前的形式而言,它可能应该是一个评论而不是一个答案.虽然这可能实际上是一个相关的链接,但如果您实际上直接在帖子中添加了一段文字,关于curses库以及为什么您认为它与解决OP问题相关,我会投票. (7认同)
  • @Isaac如果您正在使用`conio.h`的一部分,那么您可能正在使用其他部分.而且你正在移植一个使用`conio.h`的应用程序,curses可能是最好的选择.我认为downvote更像是回答的链接. (3认同)
  • 也许人们认为这是一种矫枉过正 (2认同)

Car*_*icz 6

如果呼应的屏幕是没有问题的,你可以尝试使用getchar()stdio.h.

  • 回显屏幕并不是`getch()`和`getchar()`之间的唯一区别.`getch()`在从缓冲区读取之前不会等待回车.例如,使用`getchar()`输入'a',你必须输入`a [ENTER]`.使用`getch()`,您只需要键入'a'. (6认同)