作业9-75:
P309-4.(3)插入成绩并保存。对排序后的数据再插入一个学生的成绩,将原有数据和计算出的平均分数存储在磁盘文件sort2.txt中。
student.txt
lj,2.000000,3.000000,5.000000,5
sj,23.000000,5.000000,3.000000,5
ok,23.000000,5.000000,4.000000,6
nk,2.000000,3.000000,5.000000,2
iu,2.000000,3.000000,5.000000,6
10
10
3
3
3
#include<stdio.h>
struct student{
char name[20];
float score[3];
int num;
};
void cmp(int [],int);
int main()
{
struct student stu[6];
int i,avg[6];
FILE *fp=fopen("student.txt","r");
for(i=0;i<5;i++){
/*坑爹的地方 %[^,]读取非','的字符串让后再用%*c把逗号读取掉*/fscanf(fp,"%[^,]%*c%f,%f,%f,%d%*c",stu[i].name,&stu[i].score[0],&stu[i].score[1],
&stu[i].score[2],&stu[i].num);
}
for(i=0;i<5;i++){
fscanf(fp,"%d\n",&avg[i]);
}
fclose(fp);
printf("please input new data!\n");
i=5;
scanf("%s%f%f%f%d",stu[i].name,&stu[i].score[0],&stu[i].score[1],
&stu[i].score[2],&stu[i].num);
avg[i]=(stu[i].score[0]+stu[i].score[1]+stu[i].score[2])/3;
cmp(stu,6);
fp=fopen("sort2.txt","w");
for(i=0;i<6;i++){
fprintf(fp,"%s%f%f%f%d",stu[i].name,stu[i].score[0],stu[i].score[1],
stu[i].score[2],stu[i].num);
fprintf(fp,"\n");
}
for(i=0;i<6;i++){
fprintf(fp,"%d\n",avg[i]);
}
fclose(fp);
return 0;
}
void cmp(int x[],int y){
int i,j,t;
for(i=2;i<=y;i++)
for(j=0;j<=y-i;j++)
{
if(x[j]<x[j+1]){
t=x[j];
x[j]=x[j+1];
x[j+1]=t;
}
}
}
解决这个问题参考了https://blog.csdn.net/jeffasd/article/details/80705487
还有这个链接的回答
https://zhidao.baidu.com/question/1765738567060121660.html
这篇博客非常全面的介绍了scanf的使用例如%[^,]是课本没有的,我佛了
顺便记录一下csdn博客如何改变字体类型和大小颜色的语言
参考了https://blog.csdn.net/qq_38437505/article/details/78575161
我是黑体字
我是微软雅黑
我是华文彩云
color=#0099ff size=72 face=“黑体”
color=#00ffff
color=gray
> <font face="黑体">我是黑体字</font>
<font face="微软雅黑">我是微软雅黑</font>
<font face="STCAIYUN">我是华文彩云</font>
<font color=#0099ff size=7 face="黑体">color=#0099ff size=72 face="黑体"</font>
<font color=#00ffff size=72>color=#00ffff</font>
<font color=gray size=72>color=gray</font>