struct中进行了qsort,但是排序后的struct很乱

问题描述 投票:0回答:1

我想使用 qsort 按名称对结构体数组进行排序,但输出不是我所期望的。

typedef struct node{
    char name[64];
    char ingredient[10][64];
}node;

int compare(const void *a, const void *b){
    node *nodeA = (node *)a;
    node *nodeB = (node *)b;
    return strcmp(nodeA->name, nodeB->name);
}

int main(){
    int num; scanf("%d", &num);
    int sum[num];
    node recipe[num];
    //input
    for(int i = 0; i < num; i++){
        scanf("%s", recipe[i].name);
        scanf("%d", &sum[i]);
        for(int j = 0; j < sum[i]; j++){
            scanf("%s", recipe[i].ingredient[j]);
        }
    }
    //sort
    qsort(recipe, num, sizeof(node), compare);

    //print out to check
    printf("\n");
    for(int i = 0; i < num; i++){
        printf("%s ", recipe[i].name);
        for(int j = 0; j < sum[i]; j++){
            printf("%s ", recipe[i].ingredient[j]);
        }
        printf("\n");
    }

输入如下

5
cake 4 egg flour sugar butter
omelet 4 egg bacon ham butter
bread 1 flour
breed 0
breag 0

输出如下

bread flour    
breag H??    
breed ?i?
          
cake 
omelet 

预期输出如下

bread flour 
breag 
breed 
cake egg flour sugar butter 
omelet egg bacon ham butter 

此外,如果我还想按如下方式对每个节点内的成分进行排序,如何实现?

//maybe I can do something like this
for(int i = 0; i < num; i++){
    qsort(recipe[i].ingredient, num, sizeof(recipe[i].ingredient[0]), mycompare//to compare each ingredient);
}

预期输出如下

bread flour 
breag 
breed 
cake butter egg flour sugar  
omelet bacon butter egg ham
arrays c string struct qsort
1个回答
0
投票

代码仅排序

recipe[]
,但不排序
sum[]

使

sum
成为`节点的一部分。

© www.soinside.com 2019 - 2024. All rights reserved.