所以我被这个排序函数困住了,因为当我调试它的时候,一切看起来都很好,没有任何错误或警告,但是它不知何故陷入了无限循环。
我的结构(如果有用的话):
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;
}
最佳答案
您的ausgabesortiert
函数的声明
void ausgabesortiert(struct raeume *arr[],int used,int size)
很明显,数组
arr
包含指向struct raeume
对象的指针,而不是对象本身。但是呼叫
qsort
qsort(*arr,size,sizeof(raeume),cmp);
而comparison函数的编写就好像您正试图对从
struct raeume
位置开始的arr[0]
对象数组本身进行排序一样。虽然没有什么形式上的无效,但看起来还是很奇怪。这真的是你的意图吗?你到底想重新分类什么?
arr
数组或由arr[0]
指向的其他数组?我怀疑是前者,在这种情况下,您需要修复qsort
调用和比较函数。关于c - qsort无限循环导致错误C,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/37575970/