2014-11-25 47 views
0

我试图通过名称在一个二进制文件中读取结构数组排序,但它并没有编译, 这里的排序阵列是我做了什么:结构C

struct candidate{ 
    char inscr[10]; 
    char name[44]; 
    int year; 
    int position; 
    char curse[30]; 
}; 
typedef struct candidate Candidate; 



Candidate *read_sample_data(const char *filename) { 
    FILE *fp = fopen(filename, "rb"); 

    if (fp == NULL) 
    { 
     fprintf(stderr, "Failed to open file %s for reading\n", filename); 
     return 0; 
    } 
    fseek(fp, 0, SEEK_END); 
    size_t sz = ftell(fp); 
    rewind(fp); 
    Candidate *aux=(Candidate*)(malloc(sizeof(Candidate))); 
    Candidate *arr = malloc(sz); 
    if (arr == 0) 
    { 
     fprintf(stderr, "Failed to allocate %zu bytes memory\n", sz); 
     return 0; 
    } 
    printf("%d",sz/sizeof(Candidate)); 
    int i; 
    for (i = 0; fread(&arr[i], sizeof(Candidate), 1, fp) == 1; i++); 
    for(i=sz-2;i>=0;i--){ //bubblesort 
     int j =0; 
     for(j = 0;j<=i;j++){ 
      if(strcmp(arr[j].inscr, arr[j+1].inscr) > 0){ 
       aux=arr[j]; 
       arr[j]=arr[j+1]; 
       arr[j+1]=aux; 
      } 
     } 
    } 
} 

我测试它从文件中读取我想要的内容,但我无法对其进行分类。 Ps .:我想对它排序,这样我就可以在另一个二进制文件中写入排序后的数组。

+4

如果没有编制,您应该将您收到的完整错误添加到您的问题中。您还应该显示一个完整的自包含示例。 – 2014-11-25 01:06:32

+0

'我= sz-2'是错误的。 – BLUEPIXY 2014-11-25 10:23:54

回答

0

不知道你有你的代码编译(你忽略所有的警告?),但这些行:

aux=arr[j]; 
arr[j] = arr[j+1]; 
arr[j+1] = aux; 

应该是:

*aux=arr[j]; 
arr[j] = arr[j+1]; 
arr[j+1] = *aux; 
+0

大声笑我tryed * aux并没有工作,但现在它确实x.x ty – 2014-11-25 12:33:25

+0

如果这解决了您的问题,您应该将问题标记为已回答将其关闭。 – JS1 2014-11-25 18:42:56