C语言从一个二进制文件中提取数字到另一个文本文件中,最后有一个数字重复,求大佬解答

#include<stdio.h>
main()
{
	FILE *fp,*f;
	int num[5],n;
	if((fp=fopen("sz.bin","wb"))==NULL)
	{
		printf("打开“sz.bin”文件失败");
		return 0;
	}
	printf("请随机输入五个数:");
	for(int i=0;i<5;i++)
	{
		scanf("%d",&num[i]);
	}
	for(int i=0;i<5;i++)
	{
		fwrite(&num[i],sizeof(int),1,fp);
	}
	fclose(fp);
	if((fp=fopen("sz.bin","rb"))==NULL)
	{
		printf("打开“sz.bin”文件失败!!!");
		return 0;
	}
	if((f=fopen("sz.txt","w"))==NULL)
	{
		printf("打开“sz.txt”文件失败");
		fclose(fp);
		return 0; 
	}
	while(!feof(fp))
	{
		fread(&n,sizeof(int),1,fp);
		fprintf(f,"%d ",n);
	}
	fclose(fp);
	fclose(f);
}

 

 

二进制文件的存储,通常先存储写入数据的数量,然后写入数据。读取时就先读入这个数量,然后依次循环读取相应的数据

int count = 5;
fwrite(&count,sizeof(int),1,fp);//记录数据的数量
for(int i=0;i<5;i++)
{
	fwrite(&num[i],sizeof(int),1,fp);
}
fclose(fp);
if((fp=fopen("sz.bin","rb"))==NULL)
{
	printf("打开“sz.bin”文件失败!!!");
	return 0;
}
if((f=fopen("sz.txt","w"))==NULL)
{
	printf("打开“sz.txt”文件失败");
	fclose(fp);
	return 0; 
}

int read_count = fread(&count,sizeof(int),1,fp);
if(read_count > 0)
{ 
    for(int i=0; i<count; i++)
    {
	    read_count = fread(&n,sizeof(int),1,fp);
        if(read_count>0) //判读是否读取成功
	        fprintf(f,"%d ",n);
    }
}