0

私の英語はとても下手なので、間違いがあれば許してください。ありがとうございました !

qsort を使用してこの構造体をソートすると、この問題が発生します。

    typedef struct 
{
    double cost,earn;
}ac;

私はこのようにそれを並べたい:

int cmp(const void *a,const void *b)
{
    ac this_a=*(ac*)a;
    ac this_b=*(ac*)b;
    return (this_b.earn/this_b.cost-this_a.earn/this_a.cost)>0.0;
}

しかし、うまくいきませんでした。私がこれに変更したとき、それは働いた:

int cmp(const void *a,const void *b)
{
    ac this_a=*(ac*)a;
    ac this_b=*(ac*)b;
    return (this_a.cost*this_b.earn-this_a.earn*this_b.cost);
}

なぜこれが起こったのですか?2つの機能に違いはありますか? それとも、コードの他の部分が間違っているのでしょうか?

4

3 に答える 3

1

比較関数は、2 つの項目をどのように並べ替えるかに応じて、ゼロ未満、ゼロ、またはゼロより大きい整数を返す必要があります。

最初の例では、 > 操作の結果を返します。これは 0 または 1 です。

于 2013-10-08T04:14:01.083 に答える
0

最初の関数は 0 または 1 のみを返します。

2 番目の関数は、「負の数」、0、または「正の数」を返します。これは、おそらく「より小さい」、「等しい」、および「より大きい」を表現したいものです。

于 2013-10-08T04:14:27.657 に答える