Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

Язык Си для начинающих! С нуля! Учим быстро и просто!


 
Автор выпуска Олег Маркатов
E-mail: markatof@mail.ru

 Здравствуйте, уважаемые читатели!

         Программа для определения кода нажатых клавиш

         В этом номере рассылки рассмотрим всего одну программу, позволяющую определять код нажимаемой клавиши. Фрагменты из рассмотренной программы пригодятся нам в дальнейшем, когда будем рассматривать компьютерную графику и способы ее программирования на языке Си. Рассмотрев графические функции, напишем программу, которая позволяет рисовать на экране. Используя клавиши управления стрелка вверх и стрелка вниз, стрелка вправо и стрелка влево – перемещаем точку по экрану. За точкой остается след, цвет которого можно менять, нажимая клавишу Ввод. Естественно, что если выбрать в качестве цвета цвет фона, то сможем перемещать наш рисующий элемент в нужную нам позицию на экране. Вход из программы рисования будет происходить после нажатия клавиши ESC. Видно, что для того, чтобы эту программу рисования разработать, надо знать какие коды каким клавишам соответствуют и как эти коды отлавливать. На клавиатуре вы можете увидеть самые разные клавиши: есть буквенно-цифровые, есть управляющие (типа ввода и ESC), есть специальные (F1, F2 и т.д.). Существует несколько классификаций клавиш, но в данном контексте нас будет интересовать только одна, а именно, сколько байт посылает в буфер клавиатуры клавиша, будучи нажатой. Вы должны знать, что существует некоторая область памяти, называемая буфером клавиатуры – именно в этот буфер и идут коды нажатых клавиш. Видели, наверное, когда печатаете быстро на клавиатуре, а компьютер сильно загружен, то бывает так, что сначала напечатаешь несколько символов, нажав несколько клавиш с буквами, а потом только буквы появляются на экране. Символы быстро попадают в буфер клавиатуры, а компьютер не слишком быстро извлекает их оттуда и отображает  с опозданием. Итак, все клавиши по размеру генерируемого кода можно разделить на, возвращающие один байт (назову их обычные) и два байта (специальные). У специальных клавиш старший (первый по порядку) байт содержит все 8 бит равных нулю. А вот второй байт несет информацию о том, какая, собственно говоря, специальная клавиша была нажата, например, стрелка вверх или стрелка вправо. В программе мы будем использовать переменную flag, значение которой равно сначала нулю. Если была нажата специальная клавиша, то в буфер попало сразу два байта. Если первый байт ноль, то меняем значение переменной flag на единицу и считываем второй байт. Если флаг равен единице и не каждый из 8 бит байта равен нулю, то, значит, мы имеем дело со вторым байтом, несущим информацию о специальной клавиши. Если же  флаг равен нулю и не каждый из 8 бит байта равен нулю – была нажата обычная клавиша – состоит из одного символа, а этот символ можем распечатать. В приведенной ниже программе есть один недостаток – программа не имеет конца. Коды клавиш вы сможете посмотреть сами. Небольшое творческое задание – как сделать так, чтобы программа а) завершала свою работу при нажатии клавиши ESC (ее код 27); б) при нажатии клавиши X.  Надеюсь, что справитесь без труда, но если будут вопросы, то всегда можете прислать свой вариант мне на проверку.
Листинг программы
#include <stdio.h>
main()
{int tmp,flag=0;
printf("\nКоды клавиш\n");
l1:;
tmp=getch();
if(tmp!=0&&flag==0) printf("\n Код клавиши %d символ %c",tmp,tmp);
if (tmp==0) {flag=1;goto l1;}
if (flag==1&&tmp!=0) {flag=0;printf("\n Спец. клавиша %d",tmp);}
printf("\n----------------");
goto l1;
}


       Теперь несколько слов о наших дальнейших планах. В наших планах работа с компьютерной графикой, работа со строками и еще много всего интересного. Замечу, что текст только что разобранной программы, текст еще не разобранной программы рисования вы можете получить по ссылке http://aiv.spb.ru/files/i1.php. Линк для скачки вы увидите на экране и так же получите на  свой мобильный телефон в SMSке. Стоит все это удовольствие бешенные деньги, а именно, 30 центов, плюс еще центов 5 добавит оператор на НДС. Ссылку на более дорогое пособие с тестами стоимостью аж в целый бакс не привожу, так как ее можно всегда найти на сайте нашей рассылки http://c-programmer.spb.ru. Вообще-то если говорить об интересе к пособиям и материалам программ, то картина такова – упоминал я о них, считая с этим выпуском, в трех. Но всего было два покупателя, а может, это был один и тот же человек, купивший материалы к лекциям и файлы с тестом. Если честно, то думал, что будет более большой интерес к предлагаемым материалам. У меня в планах создание аудиокурса  - то есть получаете тексты программ и затем слушаете мои комментарии к каждой из них, мои рассказы о том, что и как делать. Сайт (http://c-programmer.spb.ru) мне сделать помогли, зарегистрировали и помогают в размещении обновлений, но сайт без профессионального дизайна. Может, есть желающие и умеющие таковой сделать из любви к искусству, то есть даром? А вообще-то по договоренности с автором материалов, все средства, что поступают с продаваемого на нашем сайте (минус половину, что берет себе посредник, предоставляющий взаимодействие с сотовым оператором)  идут на развитие сайта. 
      В планах  а) создать форум на сайте  по темам программирования; б) рассылка по языкам C++ и Паскаль. 
     Хотелось бы узнать ваше мнение, уважаемые читатели, о том, нужен ли вас аудиокурс? Надо? Если да, то какова, на ваш взгляд, приемлемая стоимость аудиокурса? Если кто-то из вас разрабатывал нечто подобное, то, может, порекомендуете какие программы использовать и где их взять? Пишите, мне интересно будет узнать ваше мнение! Напоминаю, что архив с компилятором Си версии 2.0 высылаю по запросу любому желающему (естественно, что совершенно безвозмездно, то есть даром).
                        Всех благ! 
Олег Павлович Маркатов
E-mail: markatof@mail.ru

 
 

В избранное