Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
C-files (теория).doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
106 Кб
Скачать
☆

Int fseek(file *filename, long int offset, int origin);

Функция устанавливает указатель текущий позиции файла F в соответствии со значением начала отсчета origin и смещения offset. Параметр offset равен количеству байтов, на которые будет смещен указатель файла относительно начала отсчета, заданного параметром origin. В качестве значения для параметра origin должно быть взято одно из следующих значений отсчета смещения offset, определенных в заголовке stdio.h:

  • SEEK_SET — с начала файла;

  • SEEK_CUR — с текущей позиции;

  • SEEK_END — с конца файла.

Функция возвращает нулевое значение при успешном выполнение операции, ненулевое — при возникновении сбоя при выполнении смещения

Функция fseek фактически реализует прямой доступ к любому значению в файле. Необходимо только знать месторасположение (номер байта) значения в файле. Рассмотрим использование прямого доступа в двоичных файлах на примере решения следующей задачи.

Задача 3

В созданном раннее двоичном файле D:\\game\\noobs.dat, поменять местами наибольшее и наименьшее из вещественных чисел.

Алгоритм решения задачи состоит из следующих этапов:

  1. чтение вещественных из файла в массив a.

  2. поиск в массиве а максимального (max) и минимального (min) значения и их номеров (imax, imin).

  3. перемещения указателя файла к максимальному значению и запись min.

  4. перемещения указателя файла к минимальному значению и запись max.

Ниже приведен текст программы решения задачи с комментариями.

// #include "stdafx.h" #include <iostream> using namespace std;

int main(){

setlocale (LC_ALL, "RUS"); int n, i, imax, imin; double *a, max, min; FILE *f;

//открытие файла в режиме чтения и записи f=fopen("D:\\game\\noobs.dat", "rb+");

//считываем из файла в переменную n количество //вещественных чисел в файле

fread(&n, sizeof(int), 1, f); cout<<"n="<<n<<endl;

//выделяем память для хранения вещественных чисел, //которые будут храниться в массиве a a=new double[n];

//считываем из файла в массив а вещественные числа fread(a, sizeof(double), n, f);

//поиск максимального и минимального элементов //в массиве а и их индексов for (imax=imin=0, max=min=a[0], i=1; i<n; i++){

if (a[i]>max){

max=a[i]; imax=i;

} if (a[i]<min){

min=a[i]; imin=i;

} }

//перемещение указателя к максимальному элементу fseek(f, sizeof(int)+imax*sizeof(double), SEEK_SET);

//запись min вместо максимального элемента файла fwrite(&min, sizeof(double), 1, f);

//перемещение указателя к минимальному элементу fseek(f, sizeof(int)+imin*sizeof(double), SEEK_SET);

//запись max вместо минимального элемента файла fwrite(&max, sizeof(double), 1, f);

//закрытие файла fclose(f);

//освобождение памяти delete []a;

system("pause"); return 0;

}

 

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]