Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
s__ekzamen.docx
Скачиваний:
7
Добавлен:
18.12.2018
Размер:
113.34 Кб
Скачать

56. Бинарный файл.

int readfilebin(man* x,int n,char* namefile)

{FILE* fp;int i;

fp=fopen(namefile,»rb»);

if (fp==0){cout<<»Файл не открыт!»<<’\n’; getch(); return -1; }

else

for(i=0;i<n;i++)

{fread((x+i),sizeof(man),1,fp);} fclose(fp); return 1; }

Вызов данной функции: readfilebin(a,i,namefile), где a=new man[i].

fwrite-записывает данные из данного буфера в поток;

fwrite (const void*p, size_t size,size_t n,FILE*f);

Функция записывает n элементов длиной size байт из буфера,заданного указателем p,в поток f. Возвращает число записанных элементов.

fread-читает данные из потока ввода;

fread (void*buffer,size_t size,size_t count,FILE*stream);

Функция считывает count элементов size байтов в область,заданную указателем buffer,из потока stream.

Функция возвращает количество прочитанных элементов,которое может быть меньше count,если при чтении произошла ошибка или встретился конец файла.

int writef(man* x,int n)

{FILE* fp;int i;

char namefile[11];

cout<<»Введите имя файла»<<’\n’;

cin>>namefile;

fp=fopen(namefile,»wb»);

if (fp==0) {cout<<»Файл не открыт!»<<’\n’; getch(); return -1;}

else

for(i=0;i<=n-1;i++)

{fwrite((x+i),sizeof(man),1,fp); }

fclose(fp) ;return 1;}

Вызов данной функции:

writef(a,i), где a=new man[i].

МАКРОСЫ.

Макрос va_start предназначен для установки аргумента arg_ptr на начало списка необязательных параметров и имеет вид функции с двумя параметрами :

void va_start(arg_ptr,prav_param);

Параметр prav_param должен быть последним обязательным параметром вызываемой функции , а указатель arg_prt должен быть объявлен с предопределением в списке переменных типа va_list в виде:

va_list arg_ptr;

Макрос va_start должен быть использован до первого использования макроса va_arg.

Макрокоманда va_arg обеспечивает доступ к текущему параметру вызываемой функции и тоже имеет вид функции с двумя параметрами

type_arg va_arg(arg_ptr,type);

Эта макрокоманда извлекает значение типа type по адресу, заданному указателем arg_ptr, увеличивает значение указателя arg_ptr на длину использованного параметра (длина type) и таким образом параметр arg_ptr будет указывать на следующий параметр вызываемой функции . Макрокоманда va_arg используется столько раз, сколько необходимо для извлечения всех параметров вызываемой функции .

Макрос va_end используется по окончании обработки всех параметров функции и устанавливает указатель списка необязательных параметров на ноль (NULL).

Рассмотрим применение этих макросов для обработки параметров функции вычисляющей среднее значение произвольной последовательности целых чисел . Поскольку функция имеет переменное число параметров будем считать концом списка значение равное -1. Поскольку в списке должен быть хотя бы один элемент, у функции будет один обязательный параметр.

Пример:

#include

int main()

{ int n;

int sred_znach(int,...);

n=sred_znach(2,3,4,-1);

/* вызов с четырьмя параметрами */

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

n=sred_znach(5,6,7,8,9,-1);

/* вызов с шестью параметрами */

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

return (0);

}

int sred_znach(int x,...);

{

int i=0, j=0, sum=0;

va_list uk_arg;

va_start(uk_arg,x); /* установка указателя uk_arg на */

/* первый необязятельный параметр */

if (x!=-1) sum=x; /* проверка на пустоту списка */

else return (0);

j++;

while ( (i=va_arg(uk_arg,int))!=-1)

/* выборка очередного */

{ /* параметра и проверка */

sum+=i; /* на конец списка */

j++;}

va_end(uk_arg); /* закрытие списка параметров */

return (sum/j);}

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