2017-01-25 288 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表示回車鍵)