Что возвращает getch() в Turbo C? Я использовал его для инициализации клавиш со стрелками для программы, значения, возвращаемые getch(), были 77, 80, 72 и 75, которые являются значениями ASCII для алфавитов, что ясно указывает на то, что они не являются значениями ASCII. Если они не являются значениями ASCII, то что они собой представляют?
Что возвращает getch() в Turbo C? Я уверен, что это не значения ASCII для нажатых клавиш
Ответы (2)
getch()
, указанный в нестандартном conio.h
, возвращает int:
#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 (при вводе с клавиатуры)
void delline(void); int getch(void); int getche(void);
- person David C. Rankin; 30.07.2014
Turbo C
, который является источником ссылки.
- person David C. Rankin; 31.07.2014
Функция getch() возвращает два кода клавиш для клавиш со стрелками (и некоторых других специальных клавиш). Сначала она возвращает либо 0 (0x00), либо 224 (0xE0), а затем возвращает код, идентифицирующий нажатую клавишу.
Для клавиш со стрелками сначала возвращается 224, затем 72 (вверх), 80 (вниз), 75 (влево) и 77 (вправо). Если нажаты клавиши со стрелками на цифровой клавиатуре (с выключенным NumLock), 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() никоим образом не стандартизирован, и эти коды могут различаться от компилятора к компилятору.