を発生させます。このソート関数は、デバッグ時にすべて正常に動作するように見えますが、エラーや警告は何もないので、何とか無限ループに陥ってしまいます。qsortエンドレスループはエラーC
私の構造体(それは場合に役立ちます):
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);
}
を比較My機能:
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;
}
次のように、2つのテストが非常に不必要であるため、 'cmp'関数は単純になります(2つの等価テスト)。この関数は4つのテストしか必要とせず、現在実行されていない最終的な 'return 0'があります。 'else'も必要ではありません。 –
@ WedVaneええ、あなたの権利はありがとう! –
私がニットピッキングをしている間に、 'cmp'関数は各初期化から' - '0'を取り除くことによって少し速くなります - あなたはまだ有効な比較をしています。 –