C - Entrada de teste para ctrl + personagem
-
14-11-2019 - |
Pergunta
Estava imaginando como você seria capaz de testar a entrada é guardada em um array de char, como...
char input[INPUT_SIZE];
E usando
fgets(input,INPUT_SIZE,stdin);
Para obter a entrada do usuário, mas queria saber como eu poderia usar uma instrução if para testar se as entradas dos usuários tem sido, por exemplo, ctrl + d ou qualquer ctrl + qualquer tecla?
Eu tentei usar lá ascci valor como esse..é um exemplo para testar ctrl d
if(result = 'EOT') {printf("EOT");}
O resultado é um array de char também.
Solução
Você só pode testar Ctrl+d como seu retorno EOF
, consulte o manual do seu ler para ter mais informações sobre isso, mas, geralmente, ele retorna 0.O mesmo vale para Ctrl+c, como ambos são o envio de sinais para o seu programa.
Para outros Ctrl+combinações de teclas, que é altamente depende do seu sistema.
No linux Ctrl+um e Ctrl+e em um shell ou o emacs irá mover para o início ou para o final / início da linha, respectivamente.
A maneira mais fácil de conseguir o que você quer é escrever um pequeno programa utilizando a ler, sem buffer (ver ioctl), com 8 bytes de memória, e de despejo de suas bytes de leitura cada vez que você sair da leitura.
int nbr;
int i;
char buf[8];
nbr = 42;
while (nbr > 0)
{
nbr = read(0, buf, 8);
i = 0;
while (i < nbr)
printf("%x ", buf[i++]);
printf("\n");
}
Você vai ter a versão hexadecimal do ctrl+chave recebido sequências.Provavelmente começar com \ESC ou \033 (a seqüência de caracteres de escape).Por exemplo, a seta para cima chave parece \033[A