3

そのため、qsort を使用して構造体の配列をソートするのに問題があります。

このリンクを例として使用しました: http://support.microsoft.com/kb/73853

プログラムを実行すると、最初に構造体にあった名前が空白になり、 のすべての値がゼロになりますgp

typedef int (*compfn)(const void*, const void*);

struct record
{
    char player[20];
    int gp;
};
struct record entries[15];

int compare(struct record *, struct record *);


void show ()           
{
    int v;
    qsort((void *)entries, 10, sizeof(struct record), (compfunc)compare);
    struct record *p = entries;
    for(v=0;v<counter;v++, p++)
    {
         printf("%s ..... %d \n", p->player , p->gp);
    }
}

int compare(struct record * p1, struct record * p2)
{
     if( p1->gp < p2->gp)
         return -1;
     else if (p1->gp > p2->gp)
         return 1;
     else
         return 0;
}

編集:皆さん、ご協力ありがとうございますが、皆さんが言ったことをすべて試してみましたが、それでもすべての値がゼロになります

4

2 に答える 2

0

マイクロソフトのサポート ページが本当に混乱しており、C を学習するための適切な情報源ではないという事実は別として、コードには次のものがありません&

...
qsort((void *)entries, 10, sizeof(struct record), (compfunc)compare);
... 

する必要があります

...
qsort((void *)&entries, 10, sizeof(struct record), (compfunc)compare);
... 

また、私はあなたが書くつもりだったと思います

...
qsort((void *)&entries, 15, sizeof(struct record), (compfn)compare);
... 
于 2013-04-26T07:25:19.800 に答える