c语言 运行结果的显示功能后三段数据重复了
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<process.h>
#include<conio.h>
#define N 30
#define M 1
typedef struct student
{ char number[10];
char name[20];
float score[M];
float aver;
float total;
}STU;
STU stu[N];
int n;
void inputscore();
void savescore();
void avergescore();
void total();
void modifyscore();
void lookscore();
void searchscore();
void statistic();
void add();
void modify();
void delscore();
void menu();
int main()
{ short int flag=0;
menu();
do
{
flag=1;
switch(getch())
{case '1':inputscore();break;
case '2':lookscore();break;
case '3':searchscore();break;
case '4': modify();break;
case '5':delscore();break;
case '6':savescore();break;
case '0':exit(0);
default:printf("输入有误\n");
}
printf("按任意键继续\n");
getch();
menu();
} while (flag==1);
}
void menu()
{
system("cls");
printf("\n");
printf("*********系统功能菜单 \n");
printf(" ---------------------- ---------------- \n");
printf(" ***************************************** \n");
printf(" * 1.录入商品 * * 2.显示商品 * \n");
printf(" ***************************************** \n");
printf(" * 3.查询商品 * * 4.修改商品 * \n");
printf(" ***************************************** \n");
printf(" * 5.删除商品 * * 6.保存商品 * \n");
printf(" ******************************************\n");
printf(" * 7.退出系统 * * * \n");
printf(" ---------------------- ---------------- \n");
printf("请选择菜单编号:");
}
void inputscore()//录入
{ int i,j;
system("cls");
printf("请录入商品信息: ");
scanf("%d",&n);
printf("\n");
for(i=0;i<n;i++)
{ printf("请输入商品序号:",i+1);
scanf("%s",stu[i].number);
printf("请输入商品名字:",i+1);
scanf("%s",stu[i].name);
printf("请输入进货时间:");
for(j=0;j<M;j++)
scanf("%f",&stu[i].score[j]);
printf("请输入保质时间:");
for(j=0;j<M;j++)
scanf("%f",&stu[i].aver);
printf("请输入进货量 :");
for(j=0;j<M;j++)
scanf("%f",&stu[i].total);
}
printf("成功输入\n") ;
}
void total()
{ int i,j;
for(i=0;i<n;i++)
{ stu[i].total=0;
for(j=0;j<M;j++)
{
stu[i].total+=stu[i].score[j];
}
}
}
void avergescore()//浏览
{ int i,j;
for(i=0;i<n;i++)
{ stu[i].aver=0;
for(j=0;j<M;j++)
{
stu[i].aver+=stu[i].score[j];
}
stu[i].aver=stu[i].aver/M;
}
}
void lookscore()
{ int i,j,k;
STU t;
total();
avergescore();
system("cls");
for(i=0;i<n-1;i++)
{ for(k=i,j=i+1;j<n;j++)
if(stu[j].aver>stu[k].aver)
k=j;
if(k!=j)
{ t=stu[k];
stu[k]=stu[i];
stu[i]=t;
}
}
printf("序号\t商品号\t名字\t进货时间\t保质时间\t进货量\n");
for(i=0;i<n;i++)
{ printf("%d\t%s\t%s\t",i+1,stu[i].number,stu[i].name);
for(j=0;j<M;j++)
printf("%4.2f\t\t",stu[i].score[j]);
printf("%4.2f\t\t",stu[i].aver);
printf("%4.2f\t\t",stu[i].total);
printf("\n");
}
}
因为你void total()函数和void avergescore()函数中,把stu[i].total和stu[i].aver都等于stu[i].score[0]了。所以后面输出的时候都相等啊。
具体如下图所示: