Capturar tecla [RESOLVIDO]

1. Capturar tecla [RESOLVIDO]

Luiz Augusto
luizzaugustoll

(usa Linux Mint)

Enviado em 16/05/2014 - 12:29h

Olá, eu recebi um trabalho para simular o jogo genius em c. A principio o trabalho está pronto, mas eu queria melhora-lo.
No windows, minha professora usa a funcao getche para capturar a tecla, do header conio.h, mas a versao não oficial desse header no linux utiliza a (n)curses e ela é incompativel com as funções de entrada e saida padrão do próprio c.
Resultado é que não consegui adaptá-la para uso no código, então usei a funcao getchar que só captura um digito quando se aperta Enter.
Eu queria saber se existe algum header que mantendo a compatibilidade com stdio.h do c, tenha uma funcao para capturar a tecla.


  


2. Re: Capturar tecla [RESOLVIDO]

Luiz Augusto
luizzaugustoll

(usa Linux Mint)

Enviado em 30/05/2014 - 17:24h

A solucao foi usar a unistd.h (padrao unix) e a termios.h (para a manipulação do terminal) para criar o getch() e getche().


void init_attr(struct termios *old_attr,struct termios *new_attr)
{
tcgetattr(0,&*old_attr);

*new_attr=*old_attr;
new_attr->c_lflag &=~ICANON;
new_attr->c_cc[VMIN]=1;
new_attr->c_cc[VTIME]=0;
}

int getch()
{
struct termios old_attr, new_attr;
int c;

init_attr(&old_attr,&new_attr);

new_attr.c_lflag &=~ECHO;

tcsetattr(STDIN_FILENO,TCSANOW,&new_attr);

c=getchar();

tcsetattr(STDIN_FILENO,TCSANOW,&old_attr);

return c;
}

int getche()
{
struct termios old_attr, new_attr;
int c;

init_attr(&old_attr,&new_attr);

new_attr.c_lflag &=ECHO;

tcsetattr(STDIN_FILENO,TCSANOW,&new_attr);

c=getchar();

tcsetattr(STDIN_FILENO,TCSANOW,&old_attr);

return c;
}







Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts