谁能帮我看看这个代码
不知道count为什么要-1才正确,不然每次读数据记录条数都会多读一条,导致出错
写了些简单注释,整体应该不难看懂
就是个结构体排序写文件输出的练习
#include <stdio.h>
#include <stdlib.h>
struct score//学生成绩
{
int id;
int math;
int eng;
};
void Addnew();
void Output();
main()
{
int sign=0;
do
{
printf("功能:\n");
printf("1,新增\n");
printf("2,排序并输出\n");
printf("0,退出\n");
printf("请选择:");
scanf("%d",&sign);
switch(sign)
{
case 1:Addnew();break;
case 2:Output();break;
case 0:exit(0);
}
}while(1);
}
void Addnew()
{
struct score s1;
FILE *fp;
printf("请输入学号:");
scanf("%d",&s1.id);
printf("请输入数学成绩:");
scanf("%d",&s1.math);
printf("请输入外语成绩:");
scanf("%d",&s1.eng);
fp=fopen("d:\\score.txt","ab");
fwrite(&s1,sizeof(struct score),1,fp);
fclose(fp);
}
void Output()
{
struct score s[50];
struct score tmp;
FILE *fp;
int i,j;
int count=0;//记录个数
if((fp=fopen("d:\\score.txt","rb"))==NULL)
{
printf("file not exist!");
return;
}
while(!feof(fp))
{
count++;
fread(&s[count],sizeof(struct score),1,fp);
}
count--;//不知道为什么要加这一句,本来没的,有错,加了就对了
fclose(fp);
for(i=1;i<count;i++)//升序排列
{
for(j=i+1;j<=count;j++)
{
if(s[i].id>s[j].id)
{
tmp=s[i];
s[i]=s[j];
s[j]=tmp;
}
}
}
fp=fopen("d:\\score.txt","wb");
i=1;
while(i<=count)//重新写入文件
{
fwrite(&s[i],sizeof(struct score),1,fp);
++i;
}
fclose(fp);
i=1;
printf("ID\t数学\t外语\n");
while(i<=count)//输出
{
printf("%d\t%d\t%d\n",s[i].id,s[i].math,s[i].eng);
++i;
}
}