Receber caractere em C

1. Receber caractere em C

Perfil removido
removido

(usa Nenhuma)

Enviado em 13/01/2016 - 19:05h

Como eu faço uma função em C que seja igual à função Readkey do Pascal ou igual à função Lastkey do velho Clipper?
Quero receber apenas um caractere em separado para cada tecla pressionada. Criar menus, receber tecla ESC, etc.
Desde já agradeço.
----------------------------------------------------------------------------------------------------------------
Encryption works. Properly implemented strong crypto systems are one of the few things that you can rely on. Unfortunately, endpoint security is so terrifically weak that NSA can frequently find ways around it. — Edward Snowden



  


2. Re: Receber caractere em C

felipe silva
lipman

(usa Debian)

Enviado em 13/01/2016 - 19:25h

bom sou iniciante em c e se a resposta nao tiver sentido com o que vc quer fazer me poerdoe!
vc pode usar uma string para armazenar letras, exemplo:

#include <stdio.h>
int main ()
{ /* o numero se refere a total de letras*/
int nome [30]; //string
printf ("digite sou nome");
scanf ("%s" &nome);
printf ("seu nome e %s", nome);

return 0;
}


3. Re: Receber caractere em C

Perfil removido
removido

(usa Nenhuma)

Enviado em 13/01/2016 - 19:41h

Obrigado, mas não é o que desejo.

O que gostaria é mais ou menos assim: http://www.freepascal.org/docs-html/rtl/crt/readkey.html

Funções como getchar() não funcionam deste modo.

Lembrando que estou no Linux e que não há conio.h para usar.

----------------------------------------------------------------------------------------------------------------
http://24.media.tumblr.com/tumblr_m62bwpSi291qdlh1io1_250.gif

# apt-get purge systemd

Encryption works. Properly implemented strong crypto systems are one of the few things that you can rely on. Unfortunately, endpoint security is so terrifically weak that NSA can frequently find ways around it. — Edward Snowden



4. Re: Receber caractere em C

Perfil removido
removido

(usa Nenhuma)

Enviado em 13/01/2016 - 19:53h

Se for o que entendi, você usa while/until


5. Re: Receber caractere em C

Arthur J. Hoch
Arthur_Hoch

(usa FreeBSD)

Enviado em 13/01/2016 - 20:04h

Não tenho certeza, mas talvez a ncurses faça isso.


6. Re: Receber caractere em C

Perfil removido
removido

(usa Nenhuma)

Enviado em 13/01/2016 - 20:09h

Arthur_Hoch escreveu:

Não tenho certeza, mas talvez a ncurses faça isso.


A ncurses faz isto e eu testei um exemplo, mas tem comandos demais.

Gostaria de saber se há algo mais simples.

Edit: Estou analisando um exemplo: https://www.vivaolinux.com.br/topico/C-C++/kbhit()-no-linux

----------------------------------------------------------------------------------------------------------------
http://24.media.tumblr.com/tumblr_m62bwpSi291qdlh1io1_250.gif

# apt-get purge systemd

Encryption works. Properly implemented strong crypto systems are one of the few things that you can rely on. Unfortunately, endpoint security is so terrifically weak that NSA can frequently find ways around it. — Edward Snowden



7. Re: Receber caractere em C

Arthur J. Hoch
Arthur_Hoch

(usa FreeBSD)

Enviado em 13/01/2016 - 20:12h

listeiro_037 escreveu:

Arthur_Hoch escreveu:

Não tenho certeza, mas talvez a ncurses faça isso.


A ncurses faz isto e eu testei um exemplo, mas tem comandos demais.

Gostaria de saber se há algo mais simples.

----------------------------------------------------------------------------------------------------------------
http://24.media.tumblr.com/tumblr_m62bwpSi291qdlh1io1_250.gif

# apt-get purge systemd

Encryption works. Properly implemented strong crypto systems are one of the few things that you can rely on. Unfortunately, endpoint security is so terrifically weak that NSA can frequently find ways around it. — Edward Snowden


Eu não conheço outra forma, mas talvez alguém tenha implementado e colocado no github.


8. Re: Receber caractere em C

Perfil removido
removido

(usa Nenhuma)

Enviado em 13/01/2016 - 21:14h

Um exemplo com curses seria este abaixo:

#include <curses.h>

// gcc curses-0001.c -o curses-0001 -lncurses

int main(void) {

initscr();
timeout(-1);

int c = getch();
endwin();

printf ("%d %c\n", c, c);
return 0;

}


Estou analisando coisas como initscr() e endwin() funcionam.

----------------------------------------------------------------------------------------------------------------
http://24.media.tumblr.com/tumblr_m62bwpSi291qdlh1io1_250.gif

# apt-get purge systemd

Encryption works. Properly implemented strong crypto systems are one of the few things that you can rely on. Unfortunately, endpoint security is so terrifically weak that NSA can frequently find ways around it. — Edward Snowden



9. Receber caracter

Marcelo Ruan
marceloruan

(usa Linux Mint)

Enviado em 14/01/2016 - 00:44h

Primeiro você tem que declarar ele do tip "char" e na hora de ler usar %c


#include<stdio.h>

int main(void){
char a;
/lendo caracter

scanf(%c,&a);

return(0);
}





Marcelo Ruan
Graduating in Technology in Telematics - IFPB CG
IEEE Student Member
Communications Coordinator in IEEE Student Branch - IFPB CG

Não alcançamos a liberdade buscando a liberdade, mas sim a verdade. A liberdade não é um fim, mas uma consequência.
Leon Tolstoi


10. Re: Receber caractere em C

Perfil removido
removido

(usa Nenhuma)

Enviado em 14/01/2016 - 23:54h

marceloruan escreveu:

Primeiro você tem que declarar ele do tip "char" e na hora de ler usar %c

#include<stdio.h>

int main(void){
char a;
/lendo caracter

scanf(%c,&a);

return(0);
}


Não é o que gostaria. É como é definida readkey em Pascal. Leia o texto do link abaixo:

http://www.freepascal.org/docs-html/rtl/crt/readkey.html

O jeito mais fácil que encontrei até o momento é com ncurses mas eu gostaria de uma outra possibilidade sem linkedição com bibliotecas fora do C.

Mesmo assim obrigado.

----------------------------------------------------------------------------------------------------------------
http://24.media.tumblr.com/tumblr_m62bwpSi291qdlh1io1_250.gif

# apt-get purge systemd

Encryption works. Properly implemented strong crypto systems are one of the few things that you can rely on. Unfortunately, endpoint security is so terrifically weak that NSA can frequently find ways around it. — Edward Snowden



11. termios e a Biblioteca NCurses

Enzo de Brito Ferber
EnzoFerber

(usa FreeBSD)

Enviado em 15/01/2016 - 08:30h

Olá.

Você pode fazer sem a NCurses, sim. Dá uma lida nesse HowTo:
http://tldp.org/HOWTO/NCURSES-Programming-HOWTO/intro.html

(Especialmente as duas primeiras pequenas partes, 1. Introduction e 1.1. What is NCurses?)

(...)
1.1. What is NCURSES?

You might be wondering, what the import of all this technical gibberish is. In the above scenario, every application program is supposed to query the terminfo and perform the necessary stuff (sending control characters etc.). It soon became difficult to manage this complexity and this gave birth to 'CURSES'. Curses is a pun on the name "cursor optimization". The Curses library forms a wrapper over working with raw terminal codes, and provides highly flexible and efficient API (Application Programming Interface). It provides functions to move the cursor, create windows, produce colors, play with mouse etc. The application programs need not worry about the underlying terminal capabilities.

(...)


Você pode utilizar a termios ( http://linux.die.net/man/3/termios ) e escrever o código todo a mão. Mas isso vai fazer com que seja menos portável e, acima de tudo, você estará reinventando a roda - o que não é uma das melhores práticas que você pode adotar em programação. A NCurses foi projetada para rodar em quaisquer emuladores de terminais encontrados no Linux, é portável e suportada (acredito eu) pela maior parte das distribuições Linux. Há algum motivo para não querer utilizá-la?

O importante a se ter em mente é que a NCurses é uma abstração. Como toda (boa) abstração, ela vai tornar sua vida mais fácil ao manipular os terminais, escondendo todos os pequenos e sinuosos detalhes, a um pequeno custo (overhead) justo. Se isso é um projeto de aprendizado, vá fundo e aprenda tudo sobre o termios e afins, reescreva todas as rotinas, etc. Mas se for um produto a ser distribuído, utilize a biblioteca. Será muito mais fácil dar manutenção ao código daqui algum tempo. Mais recursos sobre ela no manual: http://linux.die.net/man/3/ncurses

Acho que já vi uns artigos aqui no VoL sobre ela...

Espero ter ajudado,
Enzo Ferber
[]'s



$ indent -kr -i8 src.c

"(...)all right-thinking people know that (a) K&R are _right_ and (b) K&R are right." - linux/Documentation/CodingStyle - TORVALDS, Linus.



12. Re: Receber caractere em C

Perfil removido
removido

(usa Nenhuma)

Enviado em 15/01/2016 - 17:37h

EnzoFerber escreveu:

Olá.

Você pode fazer sem a NCurses, sim. Dá uma lida nesse HowTo:
http://tldp.org/HOWTO/NCURSES-Programming-HOWTO/intro.html

(Especialmente as duas primeiras pequenas partes, 1. Introduction e 1.1. What is NCurses?)

(...)
1.1. What is NCURSES?

You might be wondering, what the import of all this technical gibberish is. In the above scenario, every application program is supposed to query the terminfo and perform the necessary stuff (sending control characters etc.). It soon became difficult to manage this complexity and this gave birth to 'CURSES'. Curses is a pun on the name "cursor optimization". The Curses library forms a wrapper over working with raw terminal codes, and provides highly flexible and efficient API (Application Programming Interface). It provides functions to move the cursor, create windows, produce colors, play with mouse etc. The application programs need not worry about the underlying terminal capabilities.

(...)


Você pode utilizar a termios ( http://linux.die.net/man/3/termios ) e escrever o código todo a mão. Mas isso vai fazer com que seja menos portável e, acima de tudo, você estará reinventando a roda - o que não é uma das melhores práticas que você pode adotar em programação. A NCurses foi projetada para rodar em quaisquer emuladores de terminais encontrados no Linux, é portável e suportada (acredito eu) pela maior parte das distribuições Linux. Há algum motivo para não querer utilizá-la?

O importante a se ter em mente é que a NCurses é uma abstração. Como toda (boa) abstração, ela vai tornar sua vida mais fácil ao manipular os terminais, escondendo todos os pequenos e sinuosos detalhes, a um pequeno custo (overhead) justo. Se isso é um projeto de aprendizado, vá fundo e aprenda tudo sobre o termios e afins, reescreva todas as rotinas, etc. Mas se for um produto a ser distribuído, utilize a biblioteca. Será muito mais fácil dar manutenção ao código daqui algum tempo. Mais recursos sobre ela no manual: http://linux.die.net/man/3/ncurses

Acho que já vi uns artigos aqui no VoL sobre ela...

Espero ter ajudado,
Enzo Ferber
[]'s



$ indent -kr -i8 src.c

"(...)all right-thinking people know that (a) K&R are _right_ and (b) K&R are right." - linux/Documentation/CodingStyle - TORVALDS, Linus.


Isto me ajudou muito. Vou dar uma lida e pensar um pouco.

----------------------------------------------------------------------------------------------------------------
http://24.media.tumblr.com/tumblr_m62bwpSi291qdlh1io1_250.gif

# apt-get purge systemd

Encryption works. Properly implemented strong crypto systems are one of the few things that you can rely on. Unfortunately, endpoint security is so terrifically weak that NSA can frequently find ways around it. — Edward Snowden




01 02



Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts