我想使用 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
代码仅排序
recipe[]
,但不排序sum[]
。
使
sum
成为`节点的一部分。