в поток _stream. Это всего
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
(* Сборка "слова" *)
Содержание Назад Вперед