fwrite函数覆盖数据?????

zll234 2013-01-11 03:52:10
void save(char book_num[],char book_name[],int num)
{ FILE *book_fp;
struct bk *t,*p;
p=l;
if((book_fp=fopen("C:\\Users\\zll\\Downloads\\book.txt","a+"))==NULL)
{ printf("不能建立图书文件!\n"); }
t=(struct bk *)malloc(sizeof(struct bk));
strcpy(t->book_num,book_num);
strcpy(t->book_name, book_name);
t->book_kc=t->book_xc=num;
p->next=t;p=t;
fwrite(t,sizeof(struct bk),1,book_fp);
fclose(book_fp);

}
void putin()
{
struct bk *p;
p=(struct bk *)malloc(sizeof(struct bk));
int number;
int y=1;
system("cls");
while(y)
{
printf("请输入您的书的编号:");
scanf("%s",p->book_num);
printf("请输入书名:");
scanf("%s",p->book_name);
printf("请输入您要存的数量:");
scanf("%d",&number);
save(p->book_num,p->book_name,number);
printf("\n是否继续录入(1.继续;0,退出录入):");

scanf("%d",&y);
switch(y)
{
case 1:putin();
break;
case 0:system("cls");menu();
break;

}
}

}
void search()
{ struct bk *p;
p=(struct bk *)malloc(sizeof(struct bk));
printf("请输入您的书的编号:");
scanf("%s",p->book_num);
while(p!=NULL&&strcmp(p->book_num,l->book_num)!=0)
{ l=l->next;
if(l==NULL) printf("\n\t此编号对应的图书不存在!\n");
}
printf("\n\t图书编号\t图书名\t库存量\t现存量 \n");
printf(" %10s\t %10s\t %d\t %d\t\n",l->book_num,l->book_name,l->book_kc,l->book_xc);
menu();


}
...全文
528 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
赵4老师 2014-08-04
  • 打赏
  • 举报
回复
所谓修改删除文件a某位置的内容,其实是读打开文件a,再将‘a中修改删除位置之前的内容+修改删除的内容+a中修改删除位置之后的内容’保存到文件b,关闭文件a,删除文件a,将文件b改名为与之前文件a相同的名字,仅此而已。
大极张三疯 2013-04-12
  • 打赏
  • 举报
回复
楼主是要覆盖呢还是不要覆盖呢,fwrite()是以二进制写入,应该以二进制模式打开吧,覆盖与否用a+b或w+b
aozhi 2013-04-11
  • 打赏
  • 举报
回复
fopen时用a+b与fwrite对应。
赵4老师 2013-04-11
  • 打赏
  • 举报
回复
When the "r+", "w+", or "a+" access type is specified, both reading and writing are allowed (the file is said to be open for “update”). However, when you switch between reading and writing, there must be an intervening fflush, fsetpos, fseek, or rewind operation. The current position can be specified for the fsetpos or fseek operation, if desired. 推荐使用WinHex软件查看硬盘或文件或内存中的原始字节内容。 不要把 fopen("...","...");fscanf,fprintf,fclose //读时把\r\n替换成\n,写时把\n替换成\r\n;读到\x1a就设置EOF;读写的内容当字符看待 和 fopen("...","...b");fread,fwrite,fclose //不作以上替换,遇到\x1a仍继续读;读写的内容当字节看待 弄混了
少乔 2013-04-11
  • 打赏
  • 举报
回复
LZ,你打开的文件,原本是有数据的吧?你想要在哪儿写入数据呢?你要用fseek函数定位一下呀。如果不用fseek,则应该会从开头的位置写如数据,会覆盖你原有的数据
zll234 2013-01-11
  • 打赏
  • 举报
回复
引用 3 楼 nadleeh123 的回复:
被覆盖了参数不对呗
参数没错,可以帮我看看我写的
zll234 2013-01-11
  • 打赏
  • 举报
回复
引用 4 楼 nadleeh123 的回复:
平凡的open write close 参数没选对肯定会被盖,去百度下frwrite,参数比较详细
参数没错把!
nadleeh 2013-01-11
  • 打赏
  • 举报
回复
平凡的open write close 参数没选对肯定会被盖,去百度下frwrite,参数比较详细
nadleeh 2013-01-11
  • 打赏
  • 举报
回复
被覆盖了参数不对呗
zll234 2013-01-11
  • 打赏
  • 举报
回复
来人阿.....
zll234 2013-01-11
  • 打赏
  • 举报
回复
大师在哪里????

69,382

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧