#include <stdio.h>
#include"string.h"
#include <stdlib.h>
#define N 100000
struct st{
char a[15];
char b[20];
int x,y,z;
};
int fun1(int *x,int *y)
{
int t;
t=*x;
*x=*y;
*y=t;
}
int fun2(char *x,char *y)
{
char *t;
strcpy(t,x);
strcpy(x,y);
strcpy(y,t);
}
int main() {
/*_________________________________________________*/
FILE *fp,*ok;
char b[N + 1];
//判断文件是否打开
if ( (fp = fopen("D:\\操作文件1号.txt", "r")) == NULL )/*这里D:\\操作文件1号.txt 是路径;读取D盘下,名为(操作文件1号)的文本文件*/
{
puts("操作文件1号读取失败!");
exit(0);
}
else
{
puts("操作文件1号读取成功");
puts("开始计算");
}
/*__________________________________________*/
struct st s[111];
char t[20],str[N];
int aver[111]={0};
for(int i=0;i<5;i++)
{
fscanf(fp,"%s%s%d%d%d",s[i].a,s[i].b,&s[i].x,&s[i].y,&s[i].z);
printf("%s %s %d %d %d\n",s[i].a,s[i].b,s[i].x,s[i].y,s[i].z);
}
printf("按平均成绩排序\n");
for(int i=0;i<5;i++)
{
aver[i]=(s[i].x+s[i].y+s[i].z)*1.0/3;
}
printf("\n");
for(int i=0;i<5;i++)
{
for(int j=0;j<4-i;j++)
{
if(aver[j]<aver[j+1])
{
fun2(s[j].a,s[j+1].a);
fun2(s[j].b,s[j+1].b);
fun1(&aver[j],&aver[j+1]);
fun1(&s[j].x,&s[j+1].x);
fun1(&s[j].y,&s[j+1].y);
fun1(&s[j].z,&s[j+1].z);
}
}
}
if ( (ok = fopen("D:\\操作文件2号.txt", "w")) == NULL )/*D:\\操作文件2号.txt 是路径;写入D盘下,名为(操作文件2号)的文本文件*/
{
puts("操作文件2号写入失败!");
exit(0);
}
else
{
puts("操作文件2号写入成功");
}
for(int i=0;i<5;i++)
{
fprintf(ok,"第%d名;%s %s %d %d %d\n",i+1,s[i].a,s[i].b,s[i].x,s[i].y,s[i].z);
printf("第%d名;%s %s %d %d %d\n",i+1,s[i].a,s[i].b,s[i].x,s[i].y,s[i].z);
}
/*___________________________________________*/
//结束关闭文件
fclose(ok);
fclose(fp);
return 0;
}
如果对你有帮助,可以给我个采纳吗,谢谢!!
读入用fscanf之类的,排序用快排,写入用fprintf