【发布时间】:2017-04-12 14:30:40
【问题描述】:
我正在尝试在不使用任何数组的二进制文件中创建一个冒泡排序程序,而不是使用 fseek 和 fwrite 函数。
这是我的代码:
typedef struct{ //Films
short int year;
char title[LEN_NAME];
Genero_t gendre;
float rateIMDB;
}Ficha_t;
FILE * fd;
fd = fopen(name,"r+b");
Ficha_t aux1;
Ficha_t aux2;
int i,j,len;
if (fd != NULL)
{
rewind(fd);
fseek(fd, 0, SEEK_END);
len=ftell(fd);
rewind(fd);
for(i=0;i<len;i++);
{
for(j=0;j<len-1;j++)
{
fread(&aux1,sizeof(Ficha_t),1,fd);
fread(&aux2,sizeof(Ficha_t),1,fd);
if(strcmp(aux1.title,aux2.title)<0)
{
fseek(fd,-sizeof(Ficha_t)*2,SEEK_SET); //returning 2 positions for overwriting
fwrite(&aux2, sizeof(Ficha_t), 1, fd);
fwrite(&aux1, sizeof(Ficha_t), 1, fd);
fseek(fd,-sizeof(Ficha_t),SEEK_SET); //returning 1 position for checking again with the next film
}
}
}
}
它不工作,因为它显示相同的 2 部电影,我哪里错了?我能做什么?
【问题讨论】:
-
len不是记录数。并且需要倒回每个内部循环。 -
程序为什么要显示任何内容?我找不到任何
printf电话。 -
fseek(fd,-sizeof(Ficha_t),SEEK_SET);必须始终在循环结束时完成 -
SEEK_SET 是文件的开头——我认为负偏移在那里没有意义。 SEEK_CUR 是当前位置
-
现实生活中没有人会这样做。 a) 合并排序对文件来说已经更好了,b) mmap 无论如何都更快...
标签: c database bubble-sort