Como ignorar teclas de seta em C ler de stdin?
-
23-08-2019 - |
Pergunta
Estou lendo da entrada padrão usando a chamada de sistema read (), mas há uma pequena coisa que me incomoda. Eu não pode usar as teclas de seta ... O que eu realmente queria fazer era usar as setas para ir e voltar no texto digitado, mas acho que não é tão fácil ... Então, o que eu pelo menos quero fazer , é ignorá-los.
Agora, pressionando qualquer uma das teclas de seta produz uma saída estranha e eu quero evitar que algo seja escrito na saída padrão (consequentemente ler da entrada padrão na minha leitura chamada system ()).
É este facilmente possível alcançar ou não é assim tão fácil?
Solução
Para interpretar as teclas de seta do jeito que você realmente gostaria de (ou seja, para frente e para trás e editar a entrada), você geralmente precisa usar uma biblioteca. No Linux, o padrão é GNU Readline . Esperemos que alguém pode dizer o que você usaria normalmente para um aplicativo do Windows CLI.
Outras dicas
A resposta, em última análise depende de onde as chaves vêm. Corri este programa sob Cygwin:
int main(void)
{
int c=0;
while( c != 'X' ) {
c = getchar();
printf("\nc=%d", c);
}
}
Cada vez que uma tecla cursor vem junto, eu vejo escape (27), um suporte, além de outro personagem. Então, se você obter resultados como esse, você pode pular 3 teclas de cada vez que você ver um 27. Você também pode olhar para eles e fazer uso deles!
Como mencionado, YMMV, especialmente para o O.S., e a função de obtenção de chave real que você chamar.