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




Описание


uses stdio;

/* Все параметры массива args являются указателями.

 * Переменные, на которые они указывают, могут

 * иметь произвольный тип.

 */

function scanf(fmt:pchar; args:array of const):integer;

function fscanf(inf:pfile; fmt:pchar; args:array of const):integer;

function sscanf(str:pchar; fmt:pchar; args:array of const):integer;

Процедуры семейства scanf противоположны по смыслу процедурам семейства printf. Все они принимают ввод из файла (или из строки в случае процедуры sscanf), декодируют его в соответствии с информацией формата fmt и помещают полученные данные в переменные, заданные указателями в массиве args. Указатель файла перемещается на число обработанных символов.

Процедура scanf всегда выполняет чтение из stdin; процедура fscanf выполняет чтение из потока inf; а процедура sscanf выделяется в этом семействе процедур тем, что декодирует строку str и не осуществляет ввода данных. Поскольку последняя процедура работает со строкой в памяти, то она особенно полезна, если некоторую строку ввода нужно анализировать несколько раз.

Строка формата fmt имеет ту же структуру, что и строка формата процедуры printf. Например, следующий оператор считывает очередное целое число из потока стандартного ввода:

var

  inarg:integer;

scanf('%d', [@inarg]);

Важно, что функции scanf передается адрес переменной inarg. Это связано с тем, что, если нужно, чтобы процедура scanf изменяла переменную, которая находится в вызывающей процедуре, следует передать указатель, содержащий адрес этой переменной. Можно очень легко забыть про символ @, что приведет к ошибке записи в память. Новичкам также приходится бороться с искушением помещать знак @

перед всеми указателями, такими как имена символьных массивов.

В общем случае строка формата процедуры scanf может содержать:

–        пробельные символы, то есть пробелы, символы табуляции, перевода строки и страницы. Обычно они соответствуют любым пробельным символам с текущей позиции во входном потоке, до первого не пробельного символа;




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