Что возвращает getch() в Turbo C?Я уверен, что это не значения ASCII для нажатых клавиш.

StackOverflow https://stackoverflow.com//questions/25045096

  •  21-12-2019
  •  | 
  •  

Вопрос

Что возвращает getch() в Turbo C?Я использовал его для инициализации клавиш со стрелками для программы. Значения, возвращаемые getch(), были 77, 80, 72 и 75, которые являются значениями ASCII для алфавитов, что ясно указывает на то, что они не являются значениями ASCII.Если это не значения ASCII, то что это такое?

Это было полезно?

Решение

getch() предоставлено в нестандартном исполнении conio.h возвращает целое число:

#include <conio.h>

int     getch(void);

из ссылки:

A single character from the predefined standard input handle is read and returned. 
The input is not buffered. If there is a character pending from ungetch 
(see section ungetch), it is returned instead. The character is not echoed to the 
screen. This function doesn't check for special characters like Ctrl-C.

If the standard input handle is connected to the console, any pending output in the 
stdout and stderr streams is flushed before reading the input, if these streams are 
connected to the console.

Return Value

    The character.

Portability

    ANSI/ISO C  No
    POSIX       No 

Ваша проблема с клавишами со стрелками в том, что они не являются однобайтовыми символами.Чтобы обрабатывать клавиши со стрелками, вы должны обрабатывать многобайтовый коды.Числа, которые вы получаете, — это просто один из двух байтов кодов клавиш.

Пример чтения кодов см. (Как читать клавиши со стрелками) Чит-код в программировании на C (при вводе с клавиатуры)

Другие советы

Функция

getch () Возвращает два ключей клавиш со стрелками (и некоторые другие специальные клавиши), сначала он возвращает 0 (0x00), либо 224 (0xe0), а затем возвращает код, идентифицирующий ключ, которая была нажата.

Для клавиш со стрелками он возвращает 224, а затем 72 (вверх), 80 (вниз), 75 (слева) и 77 (справа).Если нажаты клавиши со стрелками Num-Pad (с Outlock off), GETCH () возвращается 0 в первую очередь вместо 224.

Так, вы можете сделать что-то вроде:

char ch = getch ();
if (ch == 0 || ch == 224)
{
    switch (getch ())
    {
    case 72:
        /* Code for up arrow handling */
        break;

    case 80:
        /* Code for down arrow handling */
        break;

    /* ... etc ... */
    }
}
.

Обратите внимание, что GETCH () никак не стандартизирован, и эти коды могут варьироваться от компилятора к компилятору.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top