C - Тестирование ввода для ctrl + символ - PullRequest
0 голосов
/ 01 марта 2012

Интересно, как вы сможете проверить вход, сохраненный в массиве символов, например ...

   char input[INPUT_SIZE];

И используя

fgets(input,INPUT_SIZE,stdin);

Чтобы получить вход отпользователь, но мне было интересно, как я мог использовать оператор if, чтобы проверить, был ли ввод пользователя, например, ctrl + d или любой ctrl + anykey?

Я пытался использовать там значение ascci, как это .. это пример для проверки ctrl d

  if(result = 'EOT') {printf("EOT");}

Результат - также массив символов.

1 Ответ

0 голосов
/ 01 марта 2012

Вы можете проверить только Ctrl + d , когда ваше чтение вернуло EOF, см. Руководство по вашему чтению, чтобы получить больше информации об этом, но обычно оно возвращает 0. То же самое идет на Ctrl + c , так как оба посылают сигналы в вашу программу.

Для других комбинаций клавиш Ctrl + это сильно зависит от вашей системы.

В Linux Ctrl + a и Ctrl + e в оболочке или emacs переместит вас в начало или конец / начало строки соответственно.

Самый простой способ получить то, что вам нужно, - написать небольшую программу, использующую чтение, без буферизации (см. ioctl ), с 8-байтовым буфером, и сбрасывать ваши байты чтения каждый раз, когда вы выходите из чтения.

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");
}

У вас будет шестнадцатеричная версия полученных последовательностей ключей ctrl +. Может начинаться с \ ESC или \ 033 (последовательность escape-символов). Например, клавиша со стрелкой вверх выглядит как \033[A

...