Autor Tópico: [Resolvido] Qual função de C retorna um carastere sem precisar premir o enter?  (Lida 2935 vezes)

Offline edjin

  • Usuário Ubuntu
  • *
  • Mensagens: 67
    • Ver perfil
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.


            
« Última modificação: 23 de Agosto de 2011, 14:24 por edjin »

Offline thesesshoumaru

  • Usuário Ubuntu
  • *
  • Mensagens: 40
  • =]
    • Ver perfil
Re: Qual função de C retorna um carastere sem precisar premir o enter?????
« Resposta #1 Online: 23 de Agosto de 2011, 00:50 »
Se não me engano,

tecla = getchar();

funciona tranquilamente.

Offline fpissarra

  • Usuário Ubuntu
  • *
  • Mensagens: 246
    • Ver perfil
    • Lost in the e-Jungle
Re: Qual função de C retorna um carastere sem precisar premir o enter?????
« Resposta #2 Online: 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 e aqui).

Offline edjin

  • Usuário Ubuntu
  • *
  • Mensagens: 67
    • Ver perfil
Re: Qual função de C retorna um carastere sem precisar premir o enter?????
« Resposta #3 Online: 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;
}

Offline fpissarra

  • Usuário Ubuntu
  • *
  • Mensagens: 246
    • Ver perfil
    • Lost in the e-Jungle
Re: Qual função de C retorna um carastere sem precisar premir o enter?????
« Resposta #4 Online: 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! ;)