C语言 超级排序

输入文件(sort.in)
共n+1行
第1行,两个整数n,k,表示有n个同学参加了考试,考了k门;
第1~n+1行,每行k+1个整数,描述1位同学的学号、科目1成绩、科目2成绩、……科目k成绩。
输出文件(sort.out)
共一行,10个整数,排名顺序输出前10名同学的学号,两个数据之间用一个空格隔开。

#include<stdio.h>
int m[10];
int s[100000];
long int n;
void sort()
{
    int i,j,k,t,max,x=0;
    scanf("%ld %d",&n,&k);
    for(i=0;i<n;i++)
    {
        scanf("\n");    
        s[i]=0;     
        for(j=0;j<k;j++)
        {
            scanf("%d",&t);
            getchar();
            s[i]=s[i]+t;
        }s[i]=s[i]-i-1;//总分记录,减去第一个学号数
    }
    while(x<=10)
    {
        max=s[0];
        m[x]=1;//学号记录
        for(i=1;i<n;i++)
        {
            if(s[i]>max)
            {
                max=s[i];
                m[x]=i+1;
            }       
        }
        s[m[x-1]]=0;
        x++;
    }
}
void print()
{   
    int i;
    for(i=0;i<10;i++)
        printf("%d",m[i]);
}
void main()
{
    sort();
    print();
}

求看程序问题

问题略多,sort()里接收并计算成绩那部分s[i]=s[i]-i;是什么意思?
下面找最高的10个成绩时 s[t]=0;岂不不是最高的成绩都清0了?
m[x++]=max;这句m[]数组里面不应该放学号吗?怎么放成绩了?
print()函数里面的for循环循环条件不能等于10。

最后部分s[t] = 0; , m[x++] = max;
我想这两个一定在循环外。
就这样。
for(j=0;j {
max=s[0];
for(i=1;i {
if(s[i]>max)
{
max=s[i];
t=i;
}
}
s[t]=0;
m[x++]=max;
}
试试吧。

s[i]=s[i]-i:每行第一个输入的是学号所以减掉学号;s[t]=0:要输出前十名所以每次循环找最大之前将前一个最大置0,前十名存入数组m【】