2014-07-30 8 views
0

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

+1

что заставляет вас думать, что клавиши со стрелками не могут вернуть символы алфавита? все сводится к эмуляции терминала. –

+0

Может ли две клавиши иметь одинаковые значения ASCII? Это моя точка зрения. –

+1

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

ответ

0

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 

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

Для примера чтения кодов см (How to read arrow keys) Cheat code in C programming (when inputted from the keyboard)

функция
+0

СПАСИБО. Но я хочу посмотреть, что именно вернет ключи. Как я могу реализовать многобайтовый код? –

+0

Проверьте ссылку в ответе. –

+0

Функция Getch в turbo c является символом не целочисленным ... –

0

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

Для клавиш со стрелками он возвращает 224, а затем 72 (вверх), 80 (вниз), 75 (слева) и 77 (справа). Если клавиши Num-подушечка стрелки (с NumLock выключена) прессует, Гече() возвращает 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 ... */ 
    } 
} 

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

+0

был ли этот ответ полезным? –

 Смежные вопросы

  • Нет связанных вопросов^_^