为什么我写入数据文件没有用啊
葱卤山猪 2019-12-27 10:59:49 //对一次歌手比赛的成绩进行管理//
//功能要求:1、输入每个选手的数据包括编号、姓名、十个评委的成绩,根据输入计算出总成绩和平均成绩(去掉最高分,去掉最低分)。//
//2、显示主菜单如下:1)输入选手数据 2)评委打分 3)成绩排序(按平均分)4)数据查询 5)追加学生数据 6)写入数据文件7)退出系统。//
#include"stdio.h"
void swap(int *a, int *b) //交换//
{
int t;
t = *a;
*a = *b;
*b = t;
}
struct singers //定义结构体//
{
int num, score[10], max, min, total;
char name[20];
float ave;
};
void getsinger(struct singers singer[], int n) //定义函数:输入选手总人数、选手序号及姓名//
{
int i;
for (i = 0; i < n; i++)
{
printf("请输入选手序号及姓名\n");
scanf("%d", &singer[i].num);
scanf("%s", &singer[i].name);
}
}
void getscore(struct singers singer[], int n) //定义函数:输入选手成绩//
{
int i, j;
for (i = 0; i < n; i++)
{
printf("第%d位选手的成绩为\n", i + 1);
for (j = 0; j < 10; j++)
scanf("%d", &singer[i].score[j]);
}
}
void sort(struct singers singer[], int n) //排序//
{
int i, k, j,sum[1000] = { 0 };
for (i = 0; i < n; i++)
{
for (k = 0; k < 10; k++) //冒泡排序//
for (j = 0; j<9; j++)
{
if (singer[i].score[j] > singer[i].score[j + 1])
swap(&singer[i].score[j], &singer[i].score[j + 1]);
}
singer[i].max = singer[i].score[9];
singer[i].min = singer[i].score[0];
for (j = 1; j < 9; j++)
sum[i] = singer[i].score[j] + sum[i];
singer[i].ave = sum[i] / 8.0;
singer[i].total = sum[i] + singer[i].max+ singer[i].min;
}
}
main()
{
int i,j;
FILE*fp;
fp = fopen("data.txt", "w+");
int a,m, n, flag = 1;
struct singers singer[100];
printf("请输入有多少选手\n");
scanf("%d", &n);
while (flag)
{
printf("**********1、输入选手数据**********\n");
printf("**********2、评 委 打 分**********\n");
printf("**********3、成 绩 排 序**********\n");
printf("**********4、数 据 查 询**********\n");
printf("**********5、追加选手数据**********\n");
printf("**********6、写入数据文件**********\n");
printf("**********7、退 出 系 统**********\n");
printf("请选择执行操作\n");
scanf("%d", &a);
switch (a)
{
case 1:getsinger(singer, n); break;
case 2:getscore(singer, n); break;
case 3:
sort(singer, n);
for (i = 0; i < n; i++)
for (j = 0; j < n - 1 ; j++)
{
if (singer[j].ave>singer[j + 1].ave)
swap(&singer[j].ave, &singer[j + 1].ave);
}for (i = 0; i < n; i++)
printf("%d号%s平均分为%.1f\n", singer[i].num, singer[i].name, singer[i].ave);
break;
case 4:printf("你想查询几号选手的数据\n");
scanf("%d", &m);
for (i = 0; i < n; i++)
if (singer[i].num == m)
printf("第%d号选手最高分为%d 最低分为%d 总分为%d 平均分为%.1f\n", m, singer[i].max, singer[i].min, singer[i].total, singer[i].ave);break;
case 5:printf("请输入追加的选手数据:序号,名字,成绩\n");
n = n + 1;
scanf("%d", &singer[n].num);
scanf("%s", &singer[n].name);
for (i = 0; i < 10; i++)
scanf("%d",&singer[n].score[i]);
break;
case 6:
printf("将数据写入文件中\n");
for (i = 0; i < n + 1; i++)
{fprintf(fp, "%d", singer[i].num);
fprintf(fp, "%s", singer[i].name);
fprintf(fp, "%d", singer[i].score);
}break;
case 7:exit(0); break;
default:flag = 0;
}
}
}