【发布时间】:2016-11-29 22:06:31
【问题描述】:
我有这个结构。
struct Transport
{
int id;
float Price;
};
在这里,我将数据读入结构数组。
void read (struct Transport **Car, int *m)
{
int i;
printf("Insert total number of cars: ");
scanf("%d",m);
*Car=(struct Transport*) malloc ((*m)*3*sizeof(struct Transport));
for(i=1; i<=*m; i++)
{
(*Car)[i].id=i;
printf("Price: ");
scanf("%f",&(*Car)[i].Price);
printf("\n");
}
}
这里是显示功能。
void display(struct Transport *Car,int m)
{
int i;
for(i=1; i<=m; i++)
{
printf("Entry #%d: \n",i);
printf("Price: %2.2f\n",(Car+i)->Price);
printf("\n");
}
}
现在问题来了。我必须按价格字段对数据进行排序。到目前为止,我已经尝试过了,但它什么也没做。
int struct_cmp_by_price(const void *a, const void *b)
{
struct Transport *ia = (struct Transport *)a;
struct Transport *ib = (struct Transport *)b;
return (int)(100.f*ia->Price - 100.f*ib->Price);
}
这是主要的样子。
int main()
{
int m;
struct Transport *Car;
read(&Car,&m);
qsort(Car, m, sizeof(struct Transport), struct_cmp_by_price);
display(Car,m);
return 0;
}
谁能帮帮我?
【问题讨论】:
-
qsort(Car,-->qsort(Car+1,或for(i=1; i<=*m-->for(i=0; i<*m -
数组索引在 C 中从 0 开始
-
对 Car+1 排序并不能修复数组末尾的添加。更改 for 循环。
-
成功了,非常感谢!
-
@MichaelDorgan 根据需要三倍保护。
malloc ((*m)*3*sizeof(struct Transport));
标签: c arrays sorting struct qsort