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

Título: [Resolvido] Qual função de C retorna um carastere sem precisar premir o enter?
Enviado 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.


            
Título: Re: Qual função de C retorna um carastere sem precisar premir o enter?????
Enviado por: thesesshoumaru em 23 de Agosto de 2011, 00:50
Se não me engano,

tecla = getchar();

funciona tranquilamente.
Título: Re: Qual função de C retorna um carastere sem precisar premir o enter?????
Enviado por: fpissarra em 23 de Agosto de 2011, 12:53
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/)).
Título: Re: Qual função de C retorna um carastere sem precisar premir o enter?????
Enviado por: edjin em 23 de Agosto de 2011, 14:19
 :) 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:
Código: [Selecionar]
#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;
}
Título: Re: Qual função de C retorna um carastere sem precisar premir o enter?????
Enviado por: fpissarra em 24 de Agosto de 2011, 12:00
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! ;)