gpt4 book ai didi

c - Qsorting 从 bin 文件中,不显示任何内容

转载 作者:太空宇宙 更新时间:2023-11-04 04:32:49 24 4
gpt4 key购买 nike

遇到这个问题。过去一天我读了很多关于 qsort 的书,我认为我对它有一定的了解,但是当我将它与文件(bin 或文本)结合使用时,我很难理解它。这让我相信问题可能不在于 int compare 或 qsorting,而是打开和关闭文件的实际过程,或者 fread 本身。罪魁祸首可能是数组“Order”。我尝试了下面列出的代码的各种迭代,但没有成功。

我的目标是简单地使用 qsort 使到达机场按顺序排列。我还需要将时间戳转换为人类可读的,我还不知道该怎么做,但我想我需要让我的数组在我打扰之前工作。

如果有人感兴趣,有问题的bin文件已经上传到http://www.filedropper.com/acars_1

    #include <stdio.h>
#include <stdlib.h>
#include <string.h>




typedef struct MyStruct_struct{
char FlightNum[7];
char OriginAirportCode[5];
char DestAirportCode[5];
unsigned timeStamp;
} MyStruct;


MyStruct Order[5000];

int compare (const void *v1, const void *v2)
{
int result;
const MyStruct *ia = (MyStruct *)v1;
const MyStruct *ib = (MyStruct *)v2;

if ((result= strcmp(ia-> OriginAirportCode, ib-> OriginAirportCode)) != 0)
return result;
if ((result = strcmp(ia->DestAirportCode, ib->DestAirportCode)) != 0)
return result;
else return 0;

}

int main(){
int i;



FILE * bin;
MyStruct myStruct;

bin = fopen("acars.bin", "rb");
while(!feof(bin))
{
fread(&myStruct,sizeof(MyStruct),1,bin);
qsort(Order, 5000, sizeof( MyStruct), compare);


}


for (i = 0; i < 300; i++) {
printf("%i) %s, %s, %s\n", i, Order[i].FlightNum, Order[i].OriginAirportCode, Order[i].DestAirportCode);

}
fclose(bin);

return 0;
}
}

enter image description here

最佳答案

好吧,您正在对 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);

关于c - Qsorting 从 bin 文件中,不显示任何内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33986523/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com