c语言,运行错误,各位看看


#include<stdio.h>
#include<string.h>

struct information{
        char name[200];
        int old;
        int great;
    };

int greats(struct information *pr,int n);

int main(void)
{
    int n,i,j;
    while(~scanf("%d",&n))
    {
        struct information mes[1005];
        for(i=0;i<n;i++)
            scanf("%s%d%d",&mes[i].name,&mes[i].old,&mes[i].great);
        greats(mes,n);
        for(i=0;i<n;i++)
            printf("%s %d %d\n",mes[i].name,mes[i].old,mes[i].great);
    }
    return 0;
}

int greats(struct information *pr,int n)
{
    int i,j,temp;
    for(i=0;i<n;i++)
    {
        for(j=i+1;j<n;j++)
        {
            if(pr[i].great>pr[j].great)
            {
                temp=pr[i].great;
                pr[i].great=pr[j].great;
                pr[j].great=temp;
            }
            if(pr[i].great==pr[j].great)
            {
                int h=strcmp(pr[i].name,pr[j].name);
                char temp[100];
                if(h==1)
                {
                    strcpy(temp,pr[i].name);
                    strcpy(pr[i].name,pr[j].name);
                    strcpy(pr[j].name,temp);
                }
                if(h==0)
                {
                    if(pr[i].old>pr[j].old)
                    {
                        int temp;
                        temp=pr[i].old;
                        pr[i].old=pr[j].old;
                        pr[j].old=pr[i].old;
                    }
                }
            }
        }
    }
    return 0;
}

试一试吧

#include<stdio.h>
#include<string.h>
struct information {
    char name[200];
    int old;
    int great;
};
int greats(struct information *pr, int n);
int main(void)
{
    int n, i, j;
    while (scanf("%d", &n))
    {
        struct information mes[1005];
        for (i = 0; i<n; i++)
            scanf("%s%d%d", &mes[i].name, &mes[i].old, &mes[i].great);
        greats(mes, n);
        for (i = 0; i<n; i++)
            printf("%s %d %d\n", mes[i].name, mes[i].old, mes[i].great);
    }
    return 0;
}
int greats(struct information *pr, int n)
{
    int i, j;
    information    temp;
    for (i = 0; i<n-1; i++)
    {
        for (j = i + 1; j<n; j++)
        {
            if (pr[i].great>pr[j].great)
            {
                temp = pr[i];
                pr[i] = pr[j];
                pr[j] = temp;
            }
            if (pr[i].great == pr[j].great)
            {
                int h = strcmp(pr[i].name, pr[j].name);
                //char temp[100];
                if (h == 1)
                {
                    temp = pr[i];
                    pr[i] = pr[j];
                    pr[j] = temp;
                }
                if (h == 0)
                {
                    if (pr[i].old>pr[j].old)
                    {
                        temp = pr[i];
                        pr[i] = pr[j];
                        pr[j] = temp;
                    }
                }
            }
        }
    }
    return 0;
}

问题要求:

有N个学生的数据,将学生数据按成绩高低排序,如果成绩相同则按姓名字符的字母序排序,如果姓名的字母序也相同则按照学生的年龄排序,并输出N个学生排序后的信息。
输入
测试数据有多组,每组输入第一行有一个整数N(N<=1000),接下来的N行包括N个学生的数据。
每个学生的数据包括姓名(长度不超过100的字符串)、年龄(整形数)、成绩(小于等于100的正数)。

输出
将学生信息按成绩进行排序,成绩相同的则按姓名的字母序进行排序。
然后输出学生信息,按照如下格式:
姓名 年龄 成绩