2017-01-25 290 views

回答

2

如果您正在等待换行符,那么有一种简单便捷的方法可以实现这一点。只需使用getline即可。

如果您想获得其他字符,而不首先接收换行,那么事情不太便于携带。在Unix系统中,您需要将终端设置为“原始模式”。正如George的评论所提到的,ncurses是一种简单的方法,它还提供了方便的功能,用于将事物绘制到终端中的特定位置,接收任意键等。

在Windows上,您需要使用它console interface。当然,这在Windows以外是不可用的。

尼尔·巴特沃思的意见,也有一个版本诅咒的,对于Windows上运行,被称为PDCurses。如果你需要编写适用于Unix和Windows的软件,那么这是一个很好的选择。

+1

curses也可以在Windows上使用 - http://pdcurses.sourceforge.net/ –

0

在windows控制台界面getche()函数将在进一步执行之前等待按键。

+0

看来你是在误解我的问题。我想知道的是,如果有一个函数类似于getch(),但只适用于某个特定的键。 – Twilight053

0

如果您使用的是Windows,你可以使用的kbhit(),它是Microsoft运行时库的一部分。如果你是在Linux上,可以实现这样的kbhit

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

int kbhit(void) 
{ 
    struct termios oldt, newt; 
    int ch; 
    int oldf; 

    tcgetattr(STDIN_FILENO, &oldt); 
    newt = oldt; 
    newt.c_lflag &= ~(ICANON | ECHO); 
    tcsetattr(STDIN_FILENO, TCSANOW, &newt); 
    oldf = fcntl(STDIN_FILENO, F_GETFL, 0); 
    fcntl(STDIN_FILENO, F_SETFL, oldf | O_NONBLOCK); 

    ch = getchar(); 

    tcsetattr(STDIN_FILENO, TCSANOW, &oldt); 
    fcntl(STDIN_FILENO, F_SETFL, oldf); 

    if(ch != EOF) 
    { 
    ungetc(ch, stdin); 
    return 1; 
    } 

    return 0; 
} 

编译步骤:

gcc -o kbhit kbhit.c 

./kbhit 

它会提示您输入按键运行,退出时你点击一个键(不限于输入或可打印键)。

(GOT互联网 - 你可以修改代码,并使用特定的CH值如\ n表示回车键)