【求助】 C语言中修改文件中的一条信息
提示: 作者被禁止或删除 内容自动屏蔽
程序代码:#include<stdio.h>
#include<stdlib.h>
#define N 5
typedef struct
{
int year;
int mon;
int day;
}time;
typedef struct
{
int num;
char title[32];
char author[8];
char press[32];
float price;
time t;
}book;
void save(book *b)
{
int i;
FILE *fp;
if((fp=fopen("books.dat","wb"))==NULL)
{
printf("open books.dat failed!!\n");
exit(0);
}
for(i=0; i<N; i++)
{
if(fwrite(&b[i],sizeof(book),1,fp)!=1)
printf("save books[%d] info error!!\n");
}
fclose(fp);
}
void change(int n, float price )
{
FILE *fp;
book b;
if((fp=fopen("books.dat","rb+"))==NULL)
{
printf("open books.dat failed!!\n");
exit(0);
}
fseek(fp,n*sizeof(book),0);
fread(&b,sizeof(book),1,fp);
b.price = price;
fseek(fp,n*sizeof(book),0);
fwrite(&b,sizeof(book),1,fp);
fclose(fp);
}
void display()
{
FILE *fp;
int i;
book b;
if((fp=fopen("books.dat","r"))==NULL)
{
printf("open books.dat failed!!\n");
exit(0);
}
for(i=0 ; i<N; i++)
{
fread(&b,sizeof(book),1,fp);
printf("%d\t%s\t%s\t%s\t%f\t%d\t%d\t%d\n",b.num,b.title,\
b.author,b.press,b.price,b.t.year,b.t.mon,b.t.day);
}
fclose(fp);
}
int main()
{
book books[N];
int i;
int n;
float price;
for(i=0; i<N; i++)
{
printf("input the %ds book info:\n",i);
printf("num\ttiltle\tauthor\tpress\tprice\tyear\tmon\tday\n");
scanf("%d %s %s %s %f %d %d %d",&books[i].num,\
&books[i].title,&books[i].author,&books[i].press,\
&books[i].price,&books[i].t.year,\
&books[i].t.mon,&books[i].t.day);
}
save(books);
printf("the books info is:\n");
display();
printf("input which book you want to change:");
scanf("%d",&n);
printf("input a new pricef:");
scanf("%f",&price);
change(n-1,price);
printf("after change the books info:\n");
display();
return 0;
}