Режим Измерять смещение от
SEEK_SET начала файла
SEEK_CUR текущей позиции
SEEK_END конца файла
Значение, возвращаемое функцией fseek() равно 0, если все в порядке, и 1, если имеет место ошибка, например, попытка выхода за пределы области, занимаемой файлом.
Функция ftell() имеет типlong и возвращает текущую позицию указателя в файле.
#include <stdio.h>
#define MAXTITL 40
#define MAXAUTL 40
#define MAXBKS 100
struct book
{
char title[MAXTITL];
char author[MAXAUTL];
float value;
};
main()
{
struct book libry[MAXBKS];
int count=0;
int index;
printf("vvedite nazvanie knigi\n");
printf("nagmite ENTER dly ostanovki v nachale stroki\n");
while (count<MAXBKS && gets(libry[count].title) != NULL &&
libry[count].title[0] !='\0')
{
printf("avtor\n");
gets(libry[count].author);
printf("stoimost\n");
scanf("%f", &libry[count++].value);
while (getchar() != '\n')
continue;
if (count<MAXBKS)
printf("vvedite nazvanie sled knigi\n");
}
printf("perechen knig:\n");
for (index=0; index<count; index++)
printf("%s, %s: $%.2f\n", libry[index].title,libry[index].author,
libry[index].value);
}
/*Сохраняет содержимое структуры в файле*/
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#define MAX 40
#define MAXZ 100
struct komp
{
char nazv_EVM[MAX];
char tip_processor[MAX];
int ob_pam;
char tip_displey[MAX];
int kol_disk;
float stoimost;
};
main()
{
struct komp prais[MAXZ];
int count=0;
int index,filecount;
FILE *pkomp;
int size=sizeof(struct komp);
if ((pkomp=fopen("komput.dat","a+b"))==NULL)
{
fputs("nevozmogno otkrit fail book.dat\n",stderr);
exit(1);
}
rewind(pkomp); /*переход к началу файла*/
while (count<MAXZ && fread(&prais[count],size,1,pkomp)==1)
{
if(count==0)
puts("sodergimoe faila:\n");
printf("%s, %s: %d, %s, %d, %.2f\n",prais[count].nazv_EVM,
prais[count].tip_processor, prais[count].ob_pam,
prais[count].tip_displey,prais[count].kol_disk,
prais[count].stoimost);
count++;
}
filecount=count;
if(count==MAXZ)
{
fputs("file perepolnen",stderr);
exit(2);
}
printf("vvedite nazvanie komputera\n");
printf("***nagmite ENTER dly ostanovki v nachale stroki***\n");
while (count<MAXZ && gets(prais[count].nazv_EVM) != NULL &&
prais[count].nazv_EVM[0] !='\0')
{
printf("**tip processora**\n");
gets(prais[count].tip_processor);
printf("**obem pamayti**\n");
scanf("%d", &prais[count].ob_pam);
while (getchar() != '\n')
continue; /*очистка строки ввода*/
printf("**tip displey**\n");
gets(prais[count].tip_displey);
printf("**kol-vo diskovodov**\n");
scanf("%d", &prais[count].kol_disk);
printf("**Stoimost**\n");
scanf("%f", &prais[count++].stoimost);
while (getchar() != '\n')
continue;
if (count<MAXZ)
printf("vvedite nazvanie sled komputera\n");
}
printf("perechen komputerov:\n");
for (index=0; index<count; index++)
printf("%s, %s, %d, %s, %d, %.2f\n", prais[index].nazv_EVM,prais[index].tip_processor,
prais[index].ob_pam, prais[index].tip_displey,prais[index].kol_disk,
prais[index].stoimost);
fwrite(&prais[filecount],size,count-filecount,pkomp);
fclose(pkomp);
}