Стандартные библиотеки трансляторов Microsoft QuickC и C 6.0 содержат набор функций, предназначенных для работы с клавиатурой. Эти функции повторяют и немного дополняют возможности функций MS-DOS и BIOS, обслуживающих клавиатуру.
Самые простые из них - getch() и getche(). Они описаны в файле conio.h.
Функция getch() имеет следующий прототип:
int getch(void);
Эта функция возвращает ASCII-код прочитанного из клавиатурного буфера символа, причем прочитанный символ не отображается на экране. Если была нажата функциональная клавиша или клавиша перемещения курсора, функция возвращает 0. В этом случае функцию надо вызвать еще раз для получения расширенного ASCII-кода нажатой клавиши.
Функция обрабатывает клавиши Ctrl-С и Ctrl-Break - при вводе этих комбинаций клавиш работа программы завершается.
Если клавиатурный буфер пуст, программа переводится в состояние ожидания.
Функция getche() полностью аналогична функции getch(), за исключением того, что прочитанный символ отображается на экране. Приведем прототип функции getche():
int getche(void);
Приведем пример программы, отображающей на экране ASCII-коды и расширенные ASCII-коды нажимаемых клавиш:
#include <conio.h> #include <ctype.h> #include <stdio.h>
void main() { int key;
// Читаем в цикле символы с клавиатуры и отображаем // ASCII-коды нажатых клавиш. // Выходим из цикла при нажатии не клавишу ESC
for(;;) {
// Читаем символ
key = getch();
// Если прочитанный символ равен 0, вызываем функцию getch() // для получения расширенного ASCII-кода нажатой клавиши
if( (key == 0) (key == 0xe0) ) { key = getch(); printf( "Расширенный ASCII-код:\t" ); }
else printf( "ASCII-код:\t");
printf("%d\n",key);
// При нажатии на клавишу ESC выходим из цикла
if( key == 27) break; } }
Для проверки буфера клавиатуры на наличие символов можно использовать функцию kbhit(). Она также описана в файле conio.h:
int kbhit(void);
Если буфер клавиатуры не пуст, функция возвращает ненулевое значение. В этом случае программа может прочитать символы из буфера клавиатуры при помощи фукнкций getch() и getche(). Если буфер клавиатуры пуст, функция возвращает нулевое значение.