如图,删除指定的内容后,被删掉的那一行变成了其他行

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);//关闭文件

 

是不是你学生信息文件中本来就有两条重复数据呢?代码看不出会产生重复数据啊

您好,我是有问必答小助手,您的问题已经有小伙伴解答了,您看下是否解决,可以追评进行沟通哦~

如果有您比较满意的答案 / 帮您提供解决思路的答案,可以点击【采纳】按钮,给回答的小伙伴一些鼓励哦~~

ps:问答VIP仅需29元,即可享受5次/月 有问必答服务,了解详情>>>https://vip.csdn.net/askvip?utm_source=1146287632