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.

Foi útil?

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

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top