Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Hack_Fenix

Input não bloqueante

Recommended Posts

como eh que eu faço para receber entradas do teclado sem usar o getch(), scanf(), cin, ..., nenhuma dessas que param a execução do programa para receber a entrada.eu andei procurando uns exemplos, mas os que eu achei num chegaram nem perto de roda.eu acho que alguma coisa com a biblioteca bios que eu num tenhu, to errado?valew.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não entendi a essência da pergunta. Se você pede um entrada, o programa é OBRIGADO a esperar você informar um valor. A diferença entre getch com scanf e cin, é que usando getch não será necessário pressionar ENTER após informar UM valor. E com cin e scanf você digitará completamente o valor e depois pressionar ENTER.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não entendi a essência da pergunta. Se você pede um entrada, o programa é OBRIGADO a esperar você informar um valor. A diferença entre getch com scanf e cin, é que usando getch não será necessário pressionar ENTER após informar UM valor. E com cin e scanf você digitará completamente o valor e depois pressionar ENTER.

não eh isso renatomejias, por exemplo você ta usando um programa qualquer mesmo que baseado em console de texto, ou um jogo, o programa não para a execução até que você digitar alguma coisa, até onde eu vi eses programas na verdade tem um looping 'inifinito' que fica monitorando todas as entradas 'relevantes' para o programa( posição do mouse, teclado, click do mouse, etc), eu tava precizando de uma luz de como faze isso em C/C++;acho que fui mas claro desta vez. valew.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Faça o seguinte:

 

Use keyboard hooks.

 

O que é isto?

 

hook = evento

 

keyboard = teclado

 

evento do teclado.

 

Toda vez que uma tecla ser digitada, você saberá.

 

Um pequeno exemplo:

 

#include<windows.h>
LRESULT CALLBACK LowLevelKeyboardProc(int in_code, WPARAM in_wParam, LPARAM in_lParam);
int WINAPI WinMain(HINSTANCE hThisInstance,HINSTANCE hPrevInstance,LPSTR lpszArgument,int nFunsterStil)
{
HHOOK hhook1=SetWindowsHookEx(WH_KEYBOARD_LL,LowLevelKeyboardProc,hThisInstance,0);//Obs tem que mostrar a instancia, para main() você vai ter q dar um jeito de arrumar uma instancia!
MessageBox(NULL,"Agora seu programa estará rodando e, se pressionada uma tecla, por exemplo, pressione a tecla \"a\" ou \"b\" para ver o que acontece :D Criado por DAVIFN.\n\n                                                                                         Pressione o botão ok pra sair do programa.","Nosso programa rodando...",MB_OK);//ou GetMessage(0,0,0,0);
}
LRESULT CALLBACK LowLevelKeyboardProc(int in_code,WPARAM in_wParam,LPARAM in_lParam)
{
if(in_wParam==WM_KEYDOWN)//Se estiver pressionada uma tecla...
{
PKBDLLHOOKSTRUCT Distincaodasteclas=(PKBDLLHOOKSTRUCT)(in_lParam);
switch(Distincaodasteclas->vkCode)
{
case 65://tecla a em ascii
MessageBox(NULL,"Viu! A tecla \"a\" foi pressionada com sucesso por você! Agora, basta implementar esta função no seu código.","Tecla pressionada! Funcionou perfeitamente!",MB_OK);
break;
case 66:
MessageBox(NULL,"Viu! A tecla \"b\" foi pressionada com sucesso por você! Agora, basta implementar esta função no seu código.","Tecla pressionada! Funcionou perfeitamente!",MB_OK);
}
}
return 0;
}

 

Está aí o código. Agora, você terá de implementar o mesmo em seu programa. Caso precise de ajuda: davifn1@hotmail.com

 

Espero ter ajudado.

Compartilhar este post


Link para o post
Compartilhar em outros sites
até onde eu vi eses programas na verdade tem um looping 'inifinito' que fica monitorando todas as entradas 'relevantes' para o programa( posição do mouse, teclado, click do mouse, etc), eu tava precizando de uma luz de como faze isso em C/C++;

 

A dúvida é no loop infinito? É apenas um while(1)

 

#include <stdio.h>
int main(void) {
 while(1) {
	// Código aqui
 }
 return 0;
}

 

http://stackoverflow.com/questions/2311842/how-do-i-get-user-input-without-using-scanf-in-a-console-app

 

http://stackoverflow.com/questions/448944/c-non-blocking-keyboard-input

 

Se você quiser fazer polling: http://stackoverflow.com/questions/13035409/how-to-poll-a-keyboard-key-in-c

 

No geral, o pessoal do Unix/Linux recomenda usar a NCurses.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Creio que não, Isis, o que ele quer é que o programa não espere ele digitar a tecla, por exemplo, o getch() trava o console, como se fosse um pause do dos.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.