Fórum Ubuntu Linux - PT
Suporte Técnico => Programação e Scripts => Tópico iniciado por: edjin em 22 de Agosto de 2011, 22:21
-
Sou novo na programação C, e gostaria de saber qual função (ou método utilisado) retorna um caractere sem o uso do enter.
Digamos que em dado momento o programa em questão esperasse uma entrada do teclado para escolher entre executar função
funcaoX(); ou funcaoY(), sem a nessecidade de premir o enter; No exemplo o scanf() espera que o usuário aperte ENTER
#include <stdio.h>
char tecla;
main()
{
printf("escolha a tecla A ou B:");
scanf("%c",&tecla); /* Aqui espera premir o ENTER para retornar o caractere */
if(tecla=='A') funcaoX();
if(tecla=='B') funcaoY();
return 0;
}
no mais agradeco a toda comunidade.
-
Se não me engano,
tecla = getchar();
funciona tranquilamente.
-
Se não me engano,
tecla = getchar();
funciona tranquilamente.
thesesshoumaru, getchar() espera pelo <enter> ou por EOF.
edjin, uma vez que estamos falando de Ubuntu aqui, dê uma olhada na biblioteca ncurses (aqui (http://www.gnu.org/software/ncurses/) e aqui (http://tldp.org/HOWTO/NCURSES-Programming-HOWTO/)).
-
:) Antes de mais nada muito obrigado pela ajuda de vocês ;D. Realmente uma ótima alternativa seria a NCurses, pois nela já teriamos a função getch() naturalmente, (E pra não deixar de comentar, poderiamos contar com uma infinidade de possibilidades como, a sintaxe de cores, funções para o uso do mouse... ), Uma maneira muito interessante de se ter o mesmo (ou quase...) resultado seria implementar essa função direto no arquivo do programa, ou criar um arquivo de cabeçalho no diretório /usr/include e usar como uma biblioteca natural do C.
Lembrando que, dessa maneira, estariamos mudando as caracteristicas da estrutura do terminal por um breve momento, mas não deixa de ser mais uma pra coleção. ;) Abraços
Segue o codigo da função:
#include <stdio.h>
#include <termios.h>
#include <unistd.h>
int getch(){
struct termios oldt;
struct termios newt;
int ch;
tcgetattr(STDIN_FILENO &oldt);
newt = oldt;
newt.c_lflag &= ~(ICANON | ECHO);
tcsetattr(STDIN_FILENO, TCSANOW, &newt);
ch = getchar();
tcsetattr(STDIN_FILENO, TCSANOW, &oldt);
return ch;
}
-
Lembrando que, dessa maneira, estariamos mudando as caracteristicas da estrutura do terminal por um breve momento, mas não deixa de ser mais uma pra coleção. ;) Abraços
Achei a solução excelente! ;)