Системное программирование в UNIX средствами Free Pascal



         

Описание


uses stdio;

function ungetc(c:integer; _stream:pfile):integer;

Процедура ungetc возвращает символ с в поток _stream. Это всего лишь логическая операция. Входной файл не будет при этом изменяться. В случае успешного завершения процедуры ungetc символ с будет следующим символом, который будет считан процедурой getc. Гарантируется возврат только одного символа. В случае неудачной попытки вернуть символ с процедура ungetc возвращает значение EOF. Попытка вернуть сам символ EOF должна всегда завершаться неудачей. Но это обычно не представляет проблемы, так как все последующие вызовы процедуры getc после достижения конца файла приведут к возврату символа EOF.

Обычно процедура ungetc используется для восстановления исходного состояния входного потока после чтения лишнего символа для проверки условия. Следующая процедура getword применяет это простой подход для ввода строки, которая содержит либо непрерывную последовательность алфавитно-цифровых символов, либо одиночный нетекстовый символ. Конец файла кодируется возвращенным значением nil. Процедура getword принимает в качестве аргумента указатель на структуру TFILE. Она использует для проверки два макроса, определенные в файле stdio. Первый из них, isspace, определяет, является ли символ пробельным символом, таким как символ пробела, табуляции или перевода строки. Второй, isalnum, проверяет, является ли символ алфавитно-цифровым, то есть цифрой или буквой.

(* В этом файле определены isspace и isalnum *)

uses stdio;

const

  MAXTOK=256;

var

  inbuf:array [0..MAXTOK] of char;

function getword (inf:pfile):pchar;

var

  c,count:integer;

begin

  count:=0;

  (* Удалить пробельные символы *)

  repeat

    c := getc (inf);

  until not isspace (c);

  if c = EOF then

  begin

    getword:=nil;

    exit;

  end;

  if not isalnum (c) then    (* символ не является алфавитно-цифровым *)

  begin

    inbuf[count] := char(c);

    inc(count);

  end

  else

  begin

    (* Сборка "слова" *)




Содержание  Назад  Вперед