Fseek(указатель на файл, позиция, параметр)

где позиция – количество байтов (символов), отстоящих от заданного места, параметрSEEK_SET – начало файла,

SEEK_CUR – текущая позиция файла,

SEEK_END – конец файла.

Пример 1: прочитать символ из бинарного файла, отстоящий от начала файла на 9 байтов:

f_bin=fopen("D:/User/my_file.dat", "rb");

fseek(f_bin, 9, SEEK_SET);

fscanf(f_bin, "%c", &d);

printf("%c", d);

На экран будет выведено:

*

Пример 2: прочитать символ из бинарного файла, отстоящий от конца файла на 6 байтов:

f_bin=fopen("D:/User/my_file.dat", "rb");

fseek(f_bin, -6, SEEK_END);

fscanf(f_bin, "%c", &d);

printf("%c", d);

На экран будет выведено:

+

б) определение номера текущей позиции, занимаемой указателем файла (нумерация позиций начинается с нуля)

fgetpos(указатель на файл, fpos_t *pos)

где pos – текущая позиция указателя файла – переменная типа fpos_t (определен в stdio.h).

Пример: определить номера позиций начального и конечного символов файла:

fpos_t *nomer;

f_bin=fopen("D:/User/my_file.dat", "rb");

fgetpos(f_bin, &nomer); // номер начального символа

printf("\n nomer=%d", nomer);

while (!feof(f_bin)) // читаем файл до конца

{

fscanf(f_bin, "%c", &d);

}

fgetpos(f_bin, &nomer); // номер конечного символа

printf("\n nomer=%d", nomer);

На экран будет выведено:

nomer=0

nomer=15

Функции

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

Подпрограмма, произведя вычисления при заданных (входных) значениях аргументов, обеспечивает возврат в вызвавшую ее программу, причем в то же самое место, откуда она была вызвана. Разбиение большой программы на несколько мелких подпрограмм облегчает процесс программирования: маленькие подпрограммы легко читаются и понимаются, поэтому облегчается их отладка и тестирование. После того как подпрограмма написана и отлажена, можно забыть, как она сделана. Достаточно знать, какие входные аргументы необходимы для ее работы и что она дает на выходе.

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

Примерами подпрограмм являются программы вычисления отдельных функций, имеющихся в библиотеках языков программирования, – стандартных функций, а также функций ввода-вывода. Эти подпрограммы размещены в системной библиотеке языка, подключаемой к программе пользователя при ее обработке. Значит, используя в своей программе, например, функцию printf, мы обращаемся к стандартной библиотеке ввода-вывода stdio.h, подсоединяемой к нашей программе директивой препроцессора #include <stdio.h>.

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

В отличие от Паскаля в языке Си используется только один вид подпрограмм – функции. Вообще любая программа на Си представляет собой совокупность взаимосвязанных функций, одна из которых является основной (головной) – main. С нее и начинается выполнение программы.

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

Один из недостатков Паскаля заключался в том, что описание используемой функции нужно было помещать внутрь вызывающей ее программы, в раздел описания процедур и функций. В языке Си описание функций помещается отдельно от вызывающих программ, а перед заголовком main() основной программы помещаются прототипы (объявления) этих функций:

Директивы препроцессора

Прототипы функций

Void main()

{

Наши рекомендации