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

3.3.3. Примеры программ, использующих файлы

Пример 1. В файле с именемd:\stud\datхранятся сведения о студентах, представленные в виде таблицы. Программа выводит ФИО студенток первого курса по имени Татьяна в файл d:\stud\resstr, а также вы­числяет и выводит в тот же файл среднюю стипендию всех студентов.

#include <stdio.h>

#include <stdlib.h>

#include <string.h>

#include <conio.h>

void main()

{char tabl[58], /*строка таблицы*/

name[16],/*ФИО студента, поле таблицы*/

ku[3], /*курс, поле таблицы */

fio[20][46],/*Массив ФИО “Татьян”*/

stip[8];/*стипендия, поле таблицы*/

int k /*число Татьян*/,i/*число всех студентов*/;

FILE *dat,*res;/*программные имена исх. и вх. файлов*/

double sr/*средняя стипендия*/,v/*вещ. представление*/

/*стипендии*/;

dat=fopen("d:\\stud\\dat","r"); /*открытие файла для чтения*/

res=fopen("d:\\stud\\resstr","w");/*открытие файла для записи*/

k=0;sr=0;

i=0;

while (!feof(dat)) /*считываем данные, пока не закончится файл*/

{ fgets(tabl,58,dat); /*ввод строки таблицы*/

strncpy(name,tabl+18,15);name[15]='\0'; /*выделение поля ФИО*/

strncpy(ku,tabl+48,2); ku[2]='\0'; /*выделение поля “курс”*/

/*далее: является ли студентка Татьяной-первокурсницей*/

if ((strstr(name,"Татьяна")!=NULL) /*&&(!strcmp(ku," 1"))*/)

{k++;

strncpy(fio[k-1],tabl+3,45);fio[k-1][45]='\0';

/*запоминание ФИО в массиве */

};

strncpy(stip,tabl+50,7); /*выделение поля “стипендия”*/

v=atof(stip);/*преобразование строки “стипендия” в число*/

if (!v) /*нет ли ошибки преобразования*/

printf(" Ошибка в записи числа в %d стpоке таблицы\n ",i+1);

else

sr=sr+v;/*накапливание суммы стипендий*/

i++;

};

sr=sr/(i);/*вычисление средней стипендии*/

/*Далее вывод результатов*/

fprintf(res," Сpедняя стипендия pавна %8.0f\n", sr);

if(!k)

fputs(" Студенток пеpвого куpса по имени Татьяна нет",res);

else

{fputs(" Студентки пеpвого куpса по имени Татьяна",res);

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

fputs(fio[i],res);

} fclose(res);fclose(dat);/*закрытие файлов*/

}

Пример 2. Программа записывает сведения об игрушках, вве­денные с клавиатуры, в двоичный файл. Обозначения как в примере п. 3.2.

#include <stdio.h>

#include <conio.h>

#include <string.h>

void main()

{typedef struct {int nu;

char name[30];

int minage,maxage;

double rub;}TOYS;

TOYS toy,*ptoy=&toy;

int n,i; int zap=sizeof(toy);

FILE *fbin;

fbin=fopen("G:\\valia\\datbin","wb");

puts(" Введите число игрушек");

scanf("%d",&n);

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

{toy.nu=i+1;

fflush(stdin);

printf(" Номер игрушки \n",toy.nu);

puts(" Название");

gets(toy.name);

puts(" Мин. и макс. возраст и стоимость");

scanf("%d%d%lf",&toy.minage,&toy.maxage,&toy.rub);

fwrite(ptoy,zap,1,fbin);

}

fclose(fbin)

}

Вывод информации из двоичного файла на экран:

#include <stdio.h>

#include <conio.h>

#include <string.h>

void main()

{typedef struct {int nu;

char name[30];

int minage,maxage;

double rub;}TOYS;

TOYS toy,*ptoy=&toy;

int n,i; int zap=sizeof(toy);

FILE *fbin;

fbin=fopen("G:\\valia\\datbin","rb");

fread(ptoy,zap,1,fbin);

do

{

printf("\n Игрушка  %d : %s \n" " от %d до %d лет %8.0f\n" toy.nu,toy.name,toy.minage,toy.maxage,toy.rub);

fread(ptoy,zap,1,fbin);

}

while (!feof(fbin));

fclose(fbin);

}