2013-03-03 83 views
3

所以我有這個排序函數是假設要在一個結構數組中,我需要按名稱組織它們,都有名字和姓氏,如果他們的姓氏是相同的,那麼我必須繼續前進到名字也要比較一下。所以我製作了兩個包含最後名字和第一個名字的字符串,並將它們合併爲1,然後遍歷列表中的內容並查看哪些內容較小並將其移動。但問題是......它什麼都不做......我不明白爲什麼!這個排序功能爲什麼不起作用? C

void sortStruct(struct student *list, int studentCount){ 

int j, k; 

struct student temp; 

char buffer[35]; 
char buffer2[35]; 

for (j = 0 ; j <= studentCount-2 ; j++){ 

    sprintf(buffer, "%s, %s", list[j].lastname, list[j].firstname); 

    for(k = 1 ; k <= studentCount-1 ; k++){ 

     sprintf(buffer2, "%s, %s", list[k].lastname, list[k].firstname); 

     if(buffer < buffer2){ 

      temp = list[j]; 
      list[j] = list[k]; 
      list[j] = temp; 

     } 
    } 
} 
} 

任何人都知道最新錯了嗎?

+4

緩衝<緩衝器2絕對不是什麼你要。這只是比較兩個內存地址!你應該使用函數strcmp()。 – 2013-03-03 04:52:11

+0

將其添加爲答案學徒隊列:) – Skurmedel 2013-03-03 04:53:30

+0

我認爲比較了字符串的長度!? – Sherifftwinkie 2013-03-03 04:54:27

回答

2

你的功能應該是象下面這樣:

對於名稱比較

void sortStruct(struct student *list, int studentCount) 
{ 

    int j, k; 
    struct student temp; 
    char buffer[35]; 
    char buffer2[35]; 

    for (j = 0 ; j <= studentCount-2 ; j++) 
    { 
    sprintf(buffer, "%s, %s", list[j].lastname, list[j].firstname); 
    for(k = 1 ; k <= studentCount-1 ; k++) 
    { 
     sprintf(buffer2, "%s, %s", list[k].lastname, list[k].firstname); 
     if(strcmp(buffer, buffer2)<0) 
     { 
      temp = list[j]; 
      list[j] = list[k]; 
      list[j] = temp; 
     } 
    } 
    } 
} 

對於名稱長度比較

void sortStruct(struct student *list, int studentCount) 
{ 

    int j, k; 
    struct student temp; 
    char buffer[35]; 
    char buffer2[35]; 

    for (j = 0 ; j <= studentCount-2 ; j++) 
    { 
    sprintf(buffer, "%s, %s", list[j].lastname, list[j].firstname); 

    for(k = 1 ; k <= studentCount-1 ; k++) 
    { 

    sprintf(buffer2, "%s, %s", list[k].lastname, list[k].firstname); 

     if(strlen(buffer)< strlen(buffer2)) 
     { 
     temp = list[j]; 
     list[j] = list[k]; 
     list[j] = temp; 
     } 
    } 
} 
} 
+0

是否正確的內容?它仍然沒有改變任何東西,我沒有看到我填充該條件時告訴它做什麼是錯的? – Sherifftwinkie 2013-03-03 05:07:55

4

buffer < buffer2絕對不是你想要的。這只是比較兩個內存地址!您應該使用功能strcmp()。例如,

if (strcmp(buffer, buffer2) < 0)

相關問題