簡體   English   中英

結構的不能排序數組

[英]Cant sort array of struct

我有一個結構數組,是從文本文件中讀取的。我編寫了一個排序函數,該函數必須按字母順序(AZ)的名稱字段對該數組進行排序,但是它不起作用,我不知道該怎么做,請告訴我我的錯誤(代碼可以編譯,但是不排序)。

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

int my_compare(const void*,const void*);
typedef struct {
    char name[100];
    char surname[100];
    char sname[100];
    char posada[100];
    char buff[100];
    int staz;
    char buff2[100];
    int oklad;
} test;
        ;
int main()
{
    test mass[7];
    /*struct test{
        char name[100];
        char surname[100];
        char sname[100];
        char posada[100];
        char buff[100];
        int staz;
        char buff2[100];
        int oklad;
    }mass[8];
    */
    FILE *fo;
    if((fo=fopen("C:\\Users\\andyb\\Desktop\\test2.txt","r"))==NULL)
        printf("error");
    for(int i=0;i<7;i++)
    {
        fgets(mass[i].name,50,fo);
        fgets(mass[i].surname,50,fo);
        fgets(mass[i].sname,50,fo);
        fgets(mass[i].posada,50,fo);
        fgets(mass[i].buff,50,fo);
        mass[i].staz=atoi(mass[i].buff);
        fgets(mass[i].buff2,50,fo);
        mass[i].oklad=atoi(mass[i].buff2);
    }
    fclose(fo);
    for(int i=0;i<7;i++)
    {
        printf("%s%s%s%s%d\n%d\n",mass[i].name,mass[i].surname,mass[i].sname,mass[i].posada,mass[i].staz,mass[i].oklad);
    }
    qsort( mass, sizeof(mass)/sizeof(mass[0]), sizeof(mass[0]), my_compare );
    for(int i=0;i<7;i++)
    {
        printf("%s%s%s%s%d\n%d\n",mass[i].name,mass[i].surname,mass[i].sname,mass[i].posada,mass[i].staz,mass[i].oklad);
    }

    return 0;
}

int my_compare(const void *a,const void *b)
{
    const test *pa = (const test *)a;
    const test *pb = (const test *)b;

    return strcmp( pa->name, pb->name );
}

您的for循環看起來不正確:

代替這個:

for(int i=1;i<8;i++)

您應該這樣說:

for(int i=0;i<8;i++)

否則, mass[0]將包含垃圾數據,當您嘗試對其進行排序時,會發生各種未定義的行為。

    for (i = 1; i < n; i++)
          for (j = 0; j < n - i; j++) 
          {
             if (strcmp(mass[j].name, mass[j + 1].name) > 0) 
             {
                temp = mass[j];
                mass[j] = mass[j + 1];
                mass[j + 1] = temp;
             }
          }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM