2010-07-18 293 views
14

在TurboC++中,我可以使用conio.h中的getch()函數。但在Linux中,gcc不提供conio.h。我如何獲得getch()的功能?如何在Linux中實現C的getch()函數?

+4

的Turbo C是dead.Don't使用它。 – 2017-07-31 08:47:20

+0

[conio.h getch()]的Linux等效的可能的重複(https://stackoverflow.com/questions/34474627/linux-equivalent-for-conio-h-getch) – 2018-02-20 04:35:56

回答

7
+0

如果您要downvote - 請解釋爲什麼 – 2010-07-18 18:09:08

+0

同意,downvote是不合理的 - curses實際上提供了一個'getch()'函數。 – caf 2010-07-19 00:27:07

+1

也許人們會將這看作是一種過度衝擊 – Isaac 2015-10-15 15:40:16

6

如果回顯屏幕不是問題,您可以嘗試使用getchar()stdio.h

+5

getch()和getchar()之間的唯一區別不是屏幕回顯。 'getch()'在從緩衝區讀取數據之前不等待回車。例如。要使用'getchar()'輸入'a',必須輸入'a [ENTER]'。用'getch()',你只需要輸入'a'。 – 2010-07-18 19:36:22

0

在Unix中,getch()是ncurses庫的一部分。但是我爲this question寫了一個解決方法,它可以讓你使用類似getch的功能,而不需要其他的詛咒行李。

24

試試這個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; 
} 

您也可以使用ncurses庫在GCC的類似conio.h某些功能。

+0

謝謝。很有用! – 2015-08-17 12:09:52

0

根據這些解決方案code您必須手動使用getch()和getche()函數的開源代碼,如代碼所示,代碼如下。

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

static struct termios old, new; 

/* Initialize new terminal i/o settings */ 
void initTermios(int echo) 
{ 
    tcgetattr(0, &old); /* grab old terminal i/o settings */ 
    new = old; /* make new settings same as old settings */ 
    new.c_lflag &= ~ICANON; /* disable buffered i/o */ 
    new.c_lflag &= echo ? ECHO : ~ECHO; /* set echo mode */ 
    tcsetattr(0, TCSANOW, &new); /* use these new terminal i/o settings now */ 
} 

/* Restore old terminal i/o settings */ 
void resetTermios(void) 
{ 
    tcsetattr(0, TCSANOW, &old); 
} 

/* Read 1 character - echo defines echo mode */ 
char getch_(int echo) 
{ 
    char ch; 
    initTermios(echo); 
    ch = getchar(); 
    resetTermios(); 
    return ch; 
} 

/* Read 1 character without echo */ 
char getch(void) 
{ 
    return getch_(0); 
} 

/* Read 1 character with echo */ 
char getche(void) 
{ 
    return getch_(1); 
} 

只要把你的代碼主要方法

0

CONIO.H只有在Dos之前,

爲Linux,使用

sudo apt-get install libncurses-dev 

&然後

-lncurses 

//在IDE中,您必須鏈接它: 例如:codeblocks,設置 - >編譯器 - >鏈接器設置,並添加'ncurses'

0

您可以使用getch()相當於從libcaca

__extern int caca_conio_getch (void)