我想使用qsort按名称对 struct 数组进行排序,但输出结果与我预期的不同.
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
expected 输出如下
bread flour
breag
breed
cake egg flour sugar butter
omelet egg bacon ham butter
此外,如果我还想按如下方式对每个 node 中的配料进行排序,该如何实现呢?
//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);
}
expected 输出如下
bread flour
breag
breed
cake butter egg flour sugar
omelet bacon butter egg ham