2014-11-25 49 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