В TurboС++ я могу использовать функцию getch()
от conio.h
. Но в Linux gcc не предоставляет conio.h
. Как я могу получить функциональные возможности getch()
?
Как реализовать функцию getch() для C в Linux?
Ответ 1
Попробуйте этот 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
.
Ответ 2
Проверьте проклятия:
http://en.wikipedia.org/wiki/Curses_%28programming_library%29
Ответ 3
Если эхо на экран не проблема, вы можете попробовать использовать getchar()
из stdio.h
.
Ответ 4
getch()
, кажется, включен в библиотека curses.
Ответ 5
В Unix, getch()
является частью библиотеки ncurses. Но я написал обходное решение для этого вопроса, которое позволяет использовать функции getch-like без остального багажа проклятий.
Ответ 6
В соответствии с этим решением 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);
}
Просто поставьте его перед основным методом кода
Ответ 7
conio.h находится только в Dos,
для linux, используйте
sudo apt-get install libncurses-dev
& то
-lncurses
//В IDE вам нужно связать его: например: codeblocks, Setting → Compiler → Linker setting и добавьте ncurses
Ответ 8
getch()
находится в libcurses
. использование проклятий немного сложнее, потому что оно имеет глубокие ссылки на базовый терминал и должно быть инициализировано. рабочий пример для curses getch()
с инициализацией libcurses находится в getchar() возвращает то же значение (27) для клавиш со стрелками вверх и вниз
Ответ 9
Вы можете использовать эквивалент getch()
из libcaca:
__extern int caca_conio_getch (void)
Ответ 10
Если по каким-либо причинам вы не можете использовать проклятия, попробуйте это:
# 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);
}
Ответ 11
Функция getch() включена в библиотеку conio.h, но стандартная библиотека conio.h недоступна в linux, вместо этого мы можем использовать заголовочный файл curses.h. curses.h содержит определения для функций обработки экрана и оптимизации.
curses.h документация
http://pubs.opengroup.org/onlinepubs/007908775/xcurses/curses.h.html
1. Установка curses.h в Linux
//Для дистрибутивов Linux на основе Debian
sudo apt install -y libncurses5-dev libncursesw5-dev
//Для Fedora
sudo yum установить ncurses-devel
2. Программа компиляции (мое .c файл называется getchDemo)
g++ -o outputFile getchDemo.c -lncurses
3. Запуск программы
./выходной файл