C Q从bin文件排序,不显示任何内容

C Q从bin文件排序,不显示任何内容,c,arrays,bin,qsort,C,Arrays,Bin,Qsort,有麻烦了。在过去的一天里,我已经读了很多关于qsort的书,我想我已经很好地掌握了qsort,但是当我将它与文件(bin或text)结合使用时,我很难理解它。这让我相信问题可能不在于int比较或qsorting,而是打开和关闭文件的实际过程,或者fread本身。可能是阵列“顺序”是罪魁祸首。我尝试了下面列出的代码的各种迭代,但没有成功 我的目标是简单地使用qsort使到达的机场井然有序。我还需要将时间戳转换为人类可读的,我还不知道该怎么做,但我想我需要让我的数组工作之前,我甚至麻烦 如果有人感兴

有麻烦了。在过去的一天里,我已经读了很多关于qsort的书,我想我已经很好地掌握了qsort,但是当我将它与文件(bin或text)结合使用时,我很难理解它。这让我相信问题可能不在于int比较或qsorting,而是打开和关闭文件的实际过程,或者fread本身。可能是阵列“顺序”是罪魁祸首。我尝试了下面列出的代码的各种迭代,但没有成功

我的目标是简单地使用qsort使到达的机场井然有序。我还需要将时间戳转换为人类可读的,我还不知道该怎么做,但我想我需要让我的数组工作之前,我甚至麻烦

如果有人感兴趣,相关bin文件已上传至

#包括
#包括
#包括
typedef结构MyStruct_结构{
char-FlightNum[7];
char-OriginAirportCode[5];
char DestAirportCode[5];
无符号时间戳;
}我的结构;
我的指令[5000];
整数比较(常数无效*v1,常数无效*v2)
{
int结果;
常量MyStruct*ia=(MyStruct*)v1;
常量MyStruct*ib=(MyStruct*)v2;
如果((结果=strcmp(ia->OriginAirportCode,ib->OriginAirportCode))!=0)
返回结果;
如果((结果=strcmp(ia->DestAirportCode,ib->DestAirportCode))!=0)
返回结果;
否则返回0;
}
int main(){
int i;
文件*bin;
MyStruct MyStruct;
bin=fopen(“acars.bin”、“rb”);
而(!feof(bin))
{
fread(&myStruct,sizeof(myStruct),1,bin);
qsort(订单,5000,sizeof(MyStruct),比较);
}
对于(i=0;i<300;i++){
printf(“%i)%s,%s,%s\n”,i,订单[i]。FlightNum,订单[i]。OriginAirportCode,订单[i]。DestAirportCode);
}
fclose(bin);
返回0;
}
}

嗯,您正在对5000个元素进行排序,而您的元素可能少于5000个。此外,您正在阅读的是
myStruct
,而不是
Order

您可能希望使用如下代码:

int count = 0;
while (!feof(bin)) {
    fread(Order + count, sizeof(MyStruct), 1, bin);
    ++count;
}

qsort(Order, count, sizeof(MyStruct), compare);
或者您甚至可以将while循环更改为由一行组成:

while (!feof(bin)) fread(Order + (count++), sizeof(MyStruct), 1, bin);

嗯,您正在对5000个元素进行排序,而您的元素可能少于5000个。此外,您正在阅读的是
myStruct
,而不是
Order

您可能希望使用如下代码:

int count = 0;
while (!feof(bin)) {
    fread(Order + count, sizeof(MyStruct), 1, bin);
    ++count;
}

qsort(Order, count, sizeof(MyStruct), compare);
或者您甚至可以将while循环更改为由一行组成:

while (!feof(bin)) fread(Order + (count++), sizeof(MyStruct), 1, bin);

您必须尽可能独立地开发新功能。您正在尝试1)处理此结构,比较并重新排列其实例,2)从文件读取数据,以及3)执行快速排序。哪一个失败了?你能读写ints文件吗?你能比较一下我的结构吗?(顺便说一句,名字不好。)你能给整数排序吗?你能比较两个机场吗?你能读写吗?你能把它们的硬编码列表分类吗?缩小问题的范围。正如这里所展示的,我的阅读能力和写作能力都很好。这不是循环。这与我创建的数组或int比较有关。这是很好的第一步。现在试着将其中两个读入
Mysctruct[2]
,然后打印出来。或者尝试对其中两个进行编码并进行比较。(我不会尝试它,因为使用文件阅读器似乎涉及到比我想做的更多的工作——你应该考虑发布一个函数来生成一个小的机场文件。)谢谢,最奇怪的是,我创建了一个新的项目,并把bin文件放在那里。正如你所看到的,它得到了我想要它做的,按顺序对目的地航班进行排序。读取文件时一定有错误。好的,还有一件事是您没有检查
fopen
result。您必须尽可能独立地开发新功能。您正在尝试1)处理此结构,比较并重新排列其实例,2)从文件读取数据,以及3)执行快速排序。哪一个失败了?你能读写ints文件吗?你能比较一下我的结构吗?(顺便说一句,名字不好。)你能给整数排序吗?你能比较两个机场吗?你能读写吗?你能把它们的硬编码列表分类吗?缩小问题的范围。正如这里所展示的,我的阅读能力和写作能力都很好。这不是循环。这与我创建的数组或int比较有关。这是很好的第一步。现在试着将其中两个读入
Mysctruct[2]
,然后打印出来。或者尝试对其中两个进行编码并进行比较。(我不会尝试它,因为使用文件阅读器似乎涉及到比我想做的更多的工作——你应该考虑发布一个函数来生成一个小的机场文件。)谢谢,最奇怪的是,我创建了一个新的项目,并把bin文件放在那里。正如你所看到的,它得到了我想要它做的,按顺序对目的地航班进行排序。读取文件时一定有错误。好的,还有一件事是您没有检查
fopen
结果。您确定文件是用
MyStruct
的全尺寸结构编写的吗。我的意思是:你确定,比如说3个符号字符串
OriginAirportCode
是用5个符号写的,而不仅仅是四个符号(只为“\0”多写一个)。KMCO是机场代码之一,它们都是4个符号,为\0多写了5个符号。请参见您是否确定,该文件是用
MyStruct
的全尺寸结构编写的。我的意思是:你确定,比如说3个符号字符串
OriginAirportCode
是用5个符号写的,而不仅仅是四个符号(只为“\0”多写一个)。KMCO是机场代码之一,它们都是4个符号,为\0多写了5个符号。看见