• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

joanaccr

Ler teclas sem carregar no ENTER em linux

7 mensagens neste tópico

boas... estou com uma duvida... no linux não a a biblioteca conio.h, por isso não estou a consegui fazer o meu programa ler um valor de uma tecla sem carregar no ENTER... alguém sabe de alguma função para linux para resolver o meu problema?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

biblioteca ncursers....

modo cbreak (unbuffered input) e noecho (desligar echo do input)...

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

não ha outra forma sem usar a biblioteca ncurses??? eu queria usar somente bibliotecas ANSI... será que não nenhuma forma???

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

encontrei este código no forumdebian... e faz quase o que eu pretendo...

#include <stdio.h> //Biblioteca necessária...
#include <termios.h> //Biblioteca necessária...
#include <unistd.h> //Biblioteca necessária...

int lx_getch(void) {
struct termios lxgetch_orig, lxgetch_new; //Define as variáveis 'lxgetch_orig' e 'lxgetch_new' como do tipo termios;
int lxgetch_ch; //Variável que armazena o código ascii da tecla pressionada;

tcgetattr(STDIN_FILENO, &lxgetch_orig); //Armazena-os na variável lxgetch_orig,os parâmetros associados com os objectos de entrada estandardizada;
lxgetch_new = lxgetch_orig; //Copia os parâmetros armazenados na variável lxgetch_orig para a variável lxgetch_new;
lxgetch_new.c_lflag &= ~(ICANON | ECHO); //Muda os parâmetros dos modos locais da variável lxgetch_new, para modo canónico e ecoa caracteres de entrada;
lxgetch_new.c_iflag &= ~(ISTRIP | INPCK); //Muda os parâmetros dos modos de entrada da variável lxgetch_new, para cortar o oitavo bit e verificar paridade na entrada;
tcsetattr(STDIN_FILENO, TCSANOW, &lxgetch_new); //Define imediatamente os novos parâmetros de entrada estandardizada, que estão na variável lxgetch_new;
lxgetch_ch = getchar(); //Lê a tecla pressionada;
tcsetattr(STDIN_FILENO, TCSANOW, &lxgetch_orig); //Volta a colocar os parâmetros originais dos objectos de entrada estandardizada;

return lxgetch_ch; //Retorna o código ascii da tecla pressionada;
}

mas este código não lê o valor das teclas direccionais (setas)... alguém sabe alguma forma de adaptar o codigo para essa função ou algum complemento???

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora