这些是我的结构:
struct create{
char names[30];
int Win;
int Lose;
int Draw;
int Points;
int Average;
int Goals;
};
所以,我正在寻找一种方法,以降序对它们进行排序。就像,根据int Win
,如果Win高于其他,则应该位于顶部。
例如:
Name - Win - Lose - Draw ...
Joe - 2 - 0 - 0 ...
Bill - 1 - 0 - 1 ...
Mike - 0 - 1 - 1 ...
有可能吗?有人可以帮我这个忙。
典型的排序看起来像:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
struct create {
char *name;
int Win;
int Lose;
int Draw;
int Points;
int Average;
int Goals;
};
int
comp(const void *va, const void *vb)
{
const struct create *a = va;
const struct create *b = vb;
return a->Win > b->Win;
}
int
main(void)
{
struct create a = { .name = "a", .Win = 5 };
struct create b = { .name = "b", .Win = 7 };
struct create c = { .name = "c", .Win = 3 };
struct create *ar[] = { &a, &b, &c };
qsort(ar, sizeof ar / sizeof *ar, sizeof *ar, comp);
for( unsigned i = 0; i < sizeof ar / sizeof *ar; i++ ) {
printf(" %s: %d\n", ar[i]->name, ar[i]->Win);
}
return 0;
}
使用在标题qsort
中声明的标准C函数<stdlib.h>
创建适当的比较函数。
您在这里。
#include <stdio.h>
#include <stdlib.h>
struct create{
char names[30];
int Win;
int Lose;
int Draw;
int Points;
int Average;
int Goals;
};
int cmp( const void *a, const void *b )
{
const struct create *left = a;
const struct create *right = b;
return ( left->Win < right->Win ) - ( right->Win < left->Win );
}
int main(void)
{
struct create a[] =
{
{ .names = "Mike", .Win = 0, .Lose = 1, .Draw = 1 },
{ .names = "Joe", .Win = 2, .Lose = 0, .Draw = 0 },
{ .names = "Bill", .Win = 1, .Lose = 0, .Draw = 1 },
};
const size_t N = sizeof( a ) / sizeof( *a );
for ( size_t i = 0; i < N; i++ )
{
printf( "%-4s %d %d %d\n", a[i].names, a[i].Win, a[i].Lose, a[i].Draw );
}
putchar( '\n' );
qsort( a, N, sizeof( struct create ), cmp );
for ( size_t i = 0; i < N; i++ )
{
printf( "%-4s %d %d %d\n", a[i].names, a[i].Win, a[i].Lose, a[i].Draw );
}
putchar( '\n' );
return 0;
}
程序输出为
Mike 0 1 1
Joe 2 0 0
Bill 1 0 1
Joe 2 0 0
Bill 1 0 1
Mike 0 1 1