C语言 将结构元素作为函数参数传递

eqoofvh9  于 2023-01-12  发布在  其他
关注(0)|答案(1)|浏览(122)

所以我有一个结构体,我想按每个元素排序,升序和降序。
我创建了14个不同的排序函数,因为我不知道如何将结构元素作为函数参数传递。
我想削减到2排序函数升序和降序,所以我没有14个函数。
我该怎么处理这件事??提前感谢!

struct propertySales{
    unsigned int tanggal[3];
    char pelanggan[30];
    char jenisProperty[30];
    char namaProperty[30];
    int jumlahProperty;
    double hargaProperty;
    double totalPembayaran;
}Arr[100], compare[100], temp;

void sort_totalPembayaran_descending(){
    int currentIndex=index_counter();
    for(int i=0; i<(currentIndex-1); i++){
        for (int j=0; j<(currentIndex-i-1); j++){
            if (compare[j].totalPembayaran < compare[j+1].totalPembayaran){
                swap(&compare[j], &compare[j+1]);
            }
        }
    }
    system("cls");
    printf("Sorting berdasarkan total pembayaran (Descending)\n");
    print_column();
    print_data(compare);
}
p1iqtdky

p1iqtdky1#

如果希望按totalPembayaran字段排序,则需要创建一个比较函数,该函数接受两个指向propertySales结构体的void指针。

int compare_totalPembayaran_asc(const void *a, const void *b) {
    struct propertySales *c = (struct propertySales *)a;
    struct propertySales *d = (struct propertySales *)b;

    if (c->totalPembayaran < d->totalPembayaran)
        return -1;
    else if (c->totalPembayaran > d->totalPembayaran)
        return 1;
    else 
        return 0;
}

现在可以将其提供给qsort,以便按升序对数组进行排序。

qsort(arr, 100, sizeof(propertySales), compare_totalPembayaran_asc);

降序比较只需要编写另一个比较函数并更改返回值。

int compare_totalPembayaran_desc(const void *a, const void *b) {
    struct propertySales *c = (struct propertySales *)a;
    struct propertySales *d = (struct propertySales *)b;

    if (c->totalPembayaran < d->totalPembayaran)
        return ...;
    else if (c->totalPembayaran > d->totalPembayaran)
        return ...;
    else 
        return 0;
}

相关问题