2013-03-03 104 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)