void studel()//删除
{
char name[10];
int flag;
char ch;
FILE *fp1,*fp2;//声明两个文件指针fp1,fp2
do
{
if((fp1 = fopen("student.txt","rb")) == NULL)
{
printf("\n不能打开student.txt文件");
getchar();
exit(1);
}
if((fp2 = fopen("temp1.txt","wb")) == NULL)
{
printf("\n不能打开student.txt文件");
getchar();
exit(1);
}
printf("请输入要删除的人员:");
fflush(stdin);//清除缓存
gets(name);
flag = 0;
while(!feof(fp1))//判断文件fp1是否指向文件末尾
{
fread(&stu,sizeof(stu),1,fp1);
if(strcmp(name,stu.borrowid) == 0)
{
flag = 1;
}
else
{
fwrite(&stu,sizeof(stu),1,fp2);//将数据作为一个整体一次性写入磁盘文件
}
}
fclose(fp1);//关闭文件
fclose(fp2);//关闭文件
if(flag == 1)
{
remove("student.txt");//移除文件
rename("temp1.txt","student.txt");
printf("删除成功!\n");
}
else
{
printf("找不到图书名");
remove("temp1.txt");//移除文件
}
printf("继续删除其他图书名吗?(y/n)");
fflush(stdin);//清除缓存
ch = getchar();
getchar();
}while(ch == 'y' || ch == 'Y');
fflush(stdin);//清除缓存
}
用新文件覆盖旧文件后,文本里面的数据会出现重复现象
在34行的前面写一个打印语句,把stu的值打印出来看看。
您好,我是有问必答小助手,您的问题已经有小伙伴解答了,您看下是否解决,可以追评进行沟通哦~
如果有您比较满意的答案 / 帮您提供解决思路的答案,可以点击【采纳】按钮,给回答的小伙伴一些鼓励哦~~
ps: 问答会员【8折】购 ,仅需→¥23.2,即可享受5次/月 有问必答服务,了解详情>>>https://t.csdnimg.cn/RW5m