#include<stdio.h>
#include<stdlib.h>
#define MAXTITL 40
#define MAXAUTL 40
#define MAXBKS 10
struct book{
char title[MAXTITL];
char author[MAXAUTL];
float value;
};
int main(void)
{
struct book library[MAXBKS];
FILE *fp;
int count=0;
int index;
int filecount;
char ch_juge;
int size=sizeof(struct book);
if((fp=fopen("c:\\book.dat","a+b"))==NULL)//open the book.dat
{
printf("Can't open the book.dat\n");
exit(1);
}
rewind(fp);//make sure the pointer of the file is at the start
while(count<MAXBKS && fread(&library[count],size,1,fp)==1)//read the contents of the file to the buffer
{
if(count==0)
printf("Current contents of book.dat:\n");
printf("%s by %s :$ %.2f\n",library[count].title,library[count].author,library[count].value);
count++;
}
filecount=count;//filecount records the end of the original file data
if(count==MAXBKS)
{
printf("The book.dat file is full.\n");
exit(2);
}
printf("Do you want to add new books?(press y to add and others mean no.)\n");
if((ch_juge=getchar())!='y')
exit(3);
printf("Now add new book title.(Press [enter] at the start of a line to stop.)\n");
while(getchar()!='\n')
continue;
while(count<MAXBKS && gets(library[count].title)!=NULL && library[count].title[0]!='\0')// these lines are very important and classical
{
puts("Now enter the author.");
gets(library[count].author);
puts("Now enter the value.");
scanf("%f",&library[count].value);
count++;
while(getchar()!='\n')
continue;
if(count<MAXBKS)
printf("Enter the next book!\n");
}
if(count>0) //display the list of the books
{
puts("Here is the list of the books:\n");
for (index=0;index<count;index++)
printf("%s by %s :$ %.2f\n",library[index].title,library[index].author,library[index].value);
fwrite(&library[filecount],size,count-filecount,fp);//write and save to the book.dat
}
else
puts("No books? Too bad.\n");
puts("Bye.\n");
fclose(fp);//do not forget to close the pointer of the file
return 0;
}
结构体和文件的共同操作的一个小例子
最新推荐文章于 2024-05-24 14:09:27 发布