Что возвращает getch() в Turbo C?Я уверен, что это не значения ASCII для нажатых клавиш.
Вопрос
Что возвращает 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 () никак не стандартизирован, и эти коды могут варьироваться от компилятора к компилятору.