所以我坚持使用这种排序函数,因为当我调试它时,一切似乎都运行正常,并且没有任何错误或警告,但它会以某种方式卡在无限循环中。
我的结构(如果它有帮助):
typedef struct raeume{
char number[5];
char klasse[6];
int tische;
}raeume;
我开始使用qsort函数:
void ausgabesortiert(struct raeume *arr[],int used,int size)
{
qsort(*arr,size,sizeof(raeume),cmp);
ausgabesortiert(arr,size,used);
}
我的比较功能:
int cmp(const void * a, const void * b)
{
raeume *raumA = (raeume *) a;
raeume *raumB = (raeume *) b;
int tempA = raumA->klasse[0] - '0';
int tempB = raumB->klasse[0] - '0';
if(tempA < tempB)
{
return -1;
}
else if(tempA > tempB)
{
return 1;
}
else if(tempA == tempB)
{
if(raumA->tische > raumB->tische)
{
return -1;
}
else if(raumA->tische < raumB->tische)
{
return 1;
}
else if(raumA->tische == raumB->tische)
{
return 0;
}
}
return 0;
}
答案 0 :(得分:3)
宣布您的ausgabesortiert
功能
void ausgabesortiert(struct raeume *arr[],int used,int size)
清楚地表明数组arr
包含指针到struct raeume
个对象,而不是对象本身。
但致电qsort
qsort(*arr,size,sizeof(raeume),cmp);
和比较函数的编写就好像您要尝试从struct raeume
位置开始对arr[0]
个对象本身进行排序。
虽然这里没有任何正式的无效,但它仍然看起来很奇怪。这真的是你的意图吗?你到底想要再次排序的是什么? arr
数组或arr[0]
指向的其他数组?我怀疑它是前者,在这种情况下你需要修复qsort
调用和比较函数。