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



         

Описание


uses stdio;

function gets(buf:pchar):pchar;

function fgets(buf:pchar; nsize:integer; inf:pfile):pchar;

Процедура gets считывает последовательность символов из потока стандартного ввода (stdin), помещая все символы в буфер, на который указывает аргумент buf. Символы считываются до тех пор, пока не встретится символ перевода строки или конца файла. Символ перевода строки newline отбрасывается, и вместо него в буфер buf помещается нулевой символ, образуя завершенную строку. В случае возникновения ошибки или при достижении конца файла возвращается значение nil.

Процедура fgets является обобщенной версией процедуры gets. Она считывает символы из потока inf в буфер buf до тех пор, пока не будет считано nsize-1 символов или не встретится раньше символ перевода строки newline или не будет достигнут конец файла. В процедуре fgets символы перевода строки newline не отбрасываются, а помещаются в конец буфера (это позволяет вызывающей функции определить, в результате чего произошел возврат из процедуры fgets). Как и процедура gets, процедура fgets возвращает указатель на буфер buf в случае успеха и nil – в противном случае.

Процедура gets является довольно примитивной. Так как она не знает размер передаваемого буфера, то слишком длинная строка может привести к возникновению внутренней ошибки в процедуре. Чтобы избежать этого, можно использовать процедуру fgets (для стандартного ввода stdin).

Следующая процедура yesno использует процедуру fgets для получения положительного или отрицательного ответа от пользователя; она также вызывает макрос isspace для пропуска пробельных символов в строке ответа:

(* Процедура yesno - получить ответ от пользователя *)

uses stdio;

const

  YES=1;

  NO=0;

  ANSWSZ=80;

  pdefault:pchar = 'Наберите "y" (YES), или "n" (NO)';

  error:pchar = 'Неопределенный ответ';

function yesno (prompt:pchar):integer;

var

  buf:array [0..ANSWSZ-1] of char;

  p_use, p:pchar;

begin

  (* Вывести приглашение, если он не равно nil.




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