肯普法第一季无圣光版:请帮我解决下这个程序到底哪里有问题?谢谢各位

来源:百度文库 编辑:高校问答 时间:2024/05/05 07:54:48
这个程序是女朋友让我帮她写的 小弟不才 写了个 不过运行结果就是有点问题 请各方大侠帮忙解决下 小弟不盛感激!~
程序要求:
有一个数据文件Data.txt,其中保存着某学院119名学生五门课的考试成绩,请写程序将这些数据读入到计算机内存中,计算出每个人的总成绩,再按总成绩对学生的学号和总成绩从大到小排序,最后将全部学生排序后的学号和总成绩写入到一个文件Result.txt中。
data.txt文件内容:
990101 89 69 85 84 76
990102 78 54 73 81 65
990103 57 55 78 87 76
990104 70 68 74 76 74
990105 79 63 62 51 67
990106 67 79 96 65 81
990107 84 63 59 60 55
990108 71 55 81 89 80
990109 92 92 52 53 52
990110 61 74 74 65 85
990111 65 51 79 71 57
990112 95 88 63 64 78
990113 95 71 59 72 60
990114 83 90 73 51 55
990115 81 93 59 92 56
990201 76 75 51 99 97
990202 70 78 80 63 94
.......还有不少
我写的程序:
#include <stdio.h>
#include <string.h>
#define N 2
struct student
{
char num[6];
int score[5];
int sum;
}stu[N];
main()
{
void save1();
int i;
int j;
int p;
int t;
char c[21];
char stunum[N];
FILE *fp1;
int a=0,e=0;
int b=0,d=0;
int q=1,k=1;
if((fp1=fopen("Data.txt","rb"))==0)
{
printf("cannot open file\n");
exit(-1);
}
for(j=0;j<N;j++)
{
fgets(c,24,fp1);
/*i=ftell(fp1);
printf("%d",i); */
/* fseek(fp1,j*23,0);*/
for(i=0;i<21;i++)
{
if(i<=6)
{ if(c[i]!=' ')
{stunum[i]=c[i];
strcpy(stu[q].num,stunum);
continue;
}
else
continue;
}

if((c[i]!=' ')&&(c[i]!='\n')&&c[i]!=10)
{d=b;
b=a;
a=c[i]-30;
continue;
}
else
{e=d*100+b*10+a;
stu[q].score[k]=e;
k++;
continue;
}
}
e=d*100+b*10+a;
stu[q].score[k]=e;
q++;

}
for(i=1;i<=N;i++)
{stu[i].sum=0;
for(j=0;j<5;j++)
stu[i].sum+=stu[i].score[j];
}
for(i=1;i<=N-1;i++)
{
p=i;
for(j=i+1;j<=N;j++)
if(stu[j].sum>stu[p].sum) p=j;
if(p!=i)
{t=stu[p].sum;stu[p].sum=stu[i].sum;stu[i].sum=t;}
}
printf("pai xu wei :\n");
for(i=1;i<=2;i++)
printf("%s,%d\n",stu[i].num,stu[i].sum);
save1();
}

void save1()
{
FILE *fp;
int i;
if((fp=fopen("result.txt","wb"))==0)
{
printf("cannot open file\n");
exit(-1);
}
for(i=0;i<N;i++)
{if(fwrite(&stu[i].num,6,1,fp)!=1)
printf("file write error\n");
printf(" ");
if(fwrite(&stu[i].sum,2,1,fp)!=1)
printf("file write error\n");
printf("\n");
}
fclose(fp);
}
帮小弟改完整吧 谢谢各位了

for(j=0;j<N;j++)
{
fgets(c,28,fp1);
p1=c;
p2=stu[j].num;
while( (*p1)!=' ')
{
*p2++ = *p1;
p1++;
}
*p2 = '\0';
stu[j].sum=0;
for(i=0;i<5;i++)
{
p2=strscore;
p1++;
while( (*p1)!=' ' && (*p1)!='\n' )
{
*p2++ = *p1;
p1++;
}
*p2 = '\0';
stu[j].score[i]=atoi(strscore);
stu[j].sum += stu[j].score[i];
}
}
数据处理部分如上。排序部分基本正确;
存储部分不知你为何使用二进制写。我想应该用:
fopen("result.txt","w"))==NULL

fprintf(fp,"%s %d\n",stu[j].num,stu[j].sum );

晕……
功夫不到家
不知道……