Ввод с клавиатуры

Что делать, чтобы стать программистом Что делать, чтобы стать программистом

Многие сегодня хотят стать программистами. Хотят. Но ничего не делают для этого. Не делают даже простых вещей. Не хотят даже прочитать книжку из 10 страниц. В итоге так и остаются никем. Потому что мечты не сбываются никогда. Сбываются только планы… Подробнее...

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

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

Чтобы получить какие-либо данные от пользователя, в частности, данные, которые пользователь вводит с клавиатуры, в любом языке программирования используются стандартные функции ввода-вывода. Одну из функций Паскаля вы уже знаете: это функция ReadLn. Точнее, в Паскале это процедура, но это в данном случае не так важно.

Процедура ReadLn читает одно или несколько значений из файла или стандартного устройства ввода данных. В нашем случае это будет клавиатура, но вообще это может быть и другое устройство, например, COM-порт компьютера.

Процедура ReadLn после прочтения данных из файла переводит указатель файла на новую строку. Если в этом нет необходимости, то можно использовать процедуру Read, которая выполняет аналогичные действия, но не переводит указатель файла на новую строку. Синтаксис процедуры Read следующий:

procedure Read(var Файл; 
               Параметры);

если выполняется чтение из стандартного устройства ввода (например, с клавиатуры), то файл не указывается:

procedure Read(Параметры);

Файл - это файловая переменная.

Параметры - это одна или несколько переменных, которые могут иметь тип данных Char, Integer, Real или String.

Если в качестве параметров передаются несколько переменных, то они должны быть одного типа. Каждое значение пользователь должен вводить через пробел. Это не является интуитивно понятным, поэтому использовать несколько параметров без крайней необходимости я не рекомендую.

Работу с файлами мы уже изучали, поэтому здесь описывать работу с файлами я не буду.

Есть ещё две стандартных подпрограммы, которые могут вам пригодиться при создании консольных приложений.

Первая называется KeyPressed и объявлена в модуле CRT следующим образом:

function KeyPressed : boolean;

Она ожидает нажатия любой клавиши на клавиатуре. Если клавиша нажата, то функция возвращает TRUE. Иначе FALSE. Например, следующий код

repeat
  WriteLn('Press any key...');
until KeyPressed;

будет выводить строку 'Press any key...' до тех пор, пока пользователь не нажмёт какую-нибудь клавишу.

Очень часто возникает необходимость знать, какую именно клавишу нажал пользователь. Сделать это можно с помощью функции ReadKey, которая также объявлена в модуле CRT:

function ReadKey : Char;

Эта функция возвращает ASCII-код клавиши, которую нажал пользователь. Если пользователь нажал дополнительную или функциональную клавишу, то эта функция возвращает #0. Чтобы узнать код дополнительной или функциональной клавиши, нужно вызвать функцию ещё ReadKey раз.

Всё это вы поймёте из примера, который приведён ниже.

Листинг 24.1. Использование функции ReadKey.
program kb;

{$mode objfpc}{$H+}

uses
  {$IFDEF UNIX}{$IFDEF UseCThreads}
  cthreads,
  {$ENDIF}{$ENDIF}
  Classes,
  CRT                            //Подключить этот модуль!!!
  { you can add units after this };

var Q, E    : Char;


begin
  WriteLn('ESC - Выход. Нажмите любую клавишу...');
  repeat
    Q := ReadKey;                       //Читаем код нажатой клавиши
    case Q of                           //Если это функциональная клавиша
    #0  : begin
            E := ReadKey;               //то читаем расширенный код
            case E of
            #45 : WriteLn('ALT + X');
            #59 : WriteLn('F1');
            #60 : WriteLn('F2');
            else WriteLn('Unknow key. Code: ', Ord(E));
            end;
          end;
    #9  : WriteLn('TAB');
    #13 : WriteLn('ENTER');
    #32 : WriteLn('SPACE');
    else WriteLn('Unknow key. Code: ', Ord(Q));
    end;
  until Q = #27;
end.

Надеюсь, что у вас уже достаточно знаний, чтобы разобраться в этом коде. Ну а если вам что-то непонятно, то это может быть только по двум причинам: 1) вы случайно попали на эту страницу, 2) вы пропустили предыдущие уроки. Если это так, то начинайте сначала здесь: ОСНОВЫ ПРОГРАММИРОВАНИЯ.

ВАЖНО!
Обратите внимание на подключение модуля CRT в начале программы. Модули мы с вами пока не изучали, поэтому просто повторите этот код. Если не подключить модуль CRT, то функции ReadKey и KeyPressed не будут работать.

С помощью рассмотренных в этой статье функций можно создать уже вполне приличную и вполне удобную для пользователя программу. Так что, несмотря на то, что сегодня “рулят” оконные приложения, советую изучить вам этот материал. В жизни пригодится...


Инфо-МАСТЕР ®
Все права защищены ©
e-mail: mail@info-master.su

Яндекс.Метрика