TurboC++では、_conio.h
_のgetch()
関数を使用できます。しかしLinuxでは、gccは_conio.h
_を提供しません。 getch()
の機能を取得するにはどうすればよいですか?
次の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;
}
conio.h
に似た一部の関数には、gccの ncurses ライブラリを使用することもできます。
Cursesをチェックしてください:
http://en.wikipedia.org/wiki/Curses_%28programming_library%29
画面へのエコーが問題にならない場合は、_stdio.h
_からgetchar()
を使用してみてください。
getch()
は cursesライブラリ に含まれているようです。
libcaca のgetch()
に相当するものを使用できます。
__extern int caca_conio_getch (void)
conio.hはDosのみにあり、
linuxの場合は、
Sudo apt-get install libncurses-dev
そして次に
-lncurses
// IDEでは、リンクする必要があります。例:コードブロック、設定->コンパイラ->リンカ設定、および「ncurses」を追加
getch()
はlibcurses
にあります。 cursesの使用は、基礎となる端末へのディープリンクがあり、初期化する必要があるため、少し複雑です。 libcursesの初期化を伴うcurses getch()
の実際の例は次のとおりです getchar()は、上矢印キーと下矢印キーに同じ値(27)を返します
Unixでは、getch()
はncursesライブラリの一部です。しかし、私は この質問 の回避策を書きました。これにより、残りのcursesの荷物なしでgetchのような機能を使用できます。
これらのソリューションによると 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);
}
コードのメインメソッドの前に置くだけ
何らかの理由でcursesを使用できない場合は、これを試してください。
# include <stdio.h>
# include <stdlib.h>
# include <string.h>
# include <ctype.h>
# include <termios.h>
/* get a single char from stdin */
int getch(void)
{
struct termios oldattr, newattr;
int ch;
tcgetattr(0, &oldattr);
newattr=oldattr;
newattr.c_lflag &= ~( ICANON | ECHO );
tcsetattr( 0, TCSANOW, &newattr);
ch=getchar();
tcsetattr(0, TCSANOW, &oldattr);
return(ch);
}