萌新求解,为什么在循环内对结构体数组变量进行赋值和累加等操作,结果为0?

Nitobenzene 2017-09-27 11:43:32
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define SIZE 20
void menu(void);
typedef struct student
{
long studentID;
char studentname[10];
char studentsex[10];
int score[4];
int totalscore;
double avescore;
}STUDENT;
void InputRecord(STUDENT stu[],int n);
void total_course(STUDENT stu[],int n);
void studentscore(STUDENT stu[],int n);
void sort_descend(int n,STUDENT stu[]);
void sort_ascend(int n,STUDENT stu[]);
void sort_name(int n,STUDENT stu[]);
void sort_number(int n,STUDENT stu[]);
void search_number(int n,STUDENT stu[]);
void search_name(int n,STUDENT stu[]);
void statics(int n,STUDENT stu[]);
void ListRec(int n,STUDENT stu[]);
STUDENT stu[SIZE];
int main(void)
{
int n;
printf("How many students in your class:");
int k;
scanf("%d",&k);


while(1)
{
menu();
scanf("%d",&n);
switch(n)
{
case 1:InputRecord(stu,k);
break;
case 2:total_course(stu,k);
break;
case 3:studentscore(stu,k);
break;
case 4:sort_descend(k,stu);
break;
case 5:sort_ascend(k,stu);
break;
case 6:sort_number(k,stu);
break;
case 7:sort_name(k,stu);
break;
case 8:search_number(k,stu);
break;
case 9:search_name(k,stu);
break;
case 10:statics(k,stu);
break;
case 11:ListRec(k,stu);
break;
default:printf("error\n");
break;
}
int i=0;
for(i=0;i<n;i++)
printf("\n%s %s get %d %d %d %d\n\n",stu[i].studentname,stu[i].studentsex,stu[i].score[0],stu[i].score[1],stu[i].score[2],stu[i].score[3]);
}
printf("done\n");
return 0;
}
void menu(void)
{
printf("1.Input record\n2.Calculate total and average scores of every courses\n");
printf("3.Calculate total and average score of every student\n");
printf("4.Sort in descending order by total score of every student\n");
printf("5.Sort in ascending order by total score of every student\n");
printf("6.Sort in ascending order by number\n");
printf("7.Sort in dictionary order by name\n");
printf("8.Search by number\n");
printf("9.Search by name\n");
printf("10.Statistic analysis for every courses\n");
printf("11.List record\n0.Exit\n");
printf("Please enter your choice:");
}
void InputRecord(STUDENT stu[],int n)
{
int i;
for(i=0;i<n;i++)
{
printf("\n");
printf("enter student's ID:");
scanf("%ld",&stu[i].studentID);
printf("\nenter student's name:");
scanf("%s",stu[i].studentname);
printf("\nenter student's sex:");
scanf("%s",stu[i].studentsex);
printf("\nenter four scores of this students:\n");
int k;
for(k=0;k<4;k++)
{
printf("for course%d:",k+1);
scanf("%d",&stu[i].score[k]);
printf("\n");
}
}
printf("record done\n");
}
void total_course(STUDENT stu[],int n)
{
double ave=0;
int i,j;

for(i=0;i<4;i++)
{
static double total=1;
for(j=0;j<n;j++)
{
total+=stu[j].score[i];printf("total %d",total);
printf("\n%d\n",stu[j].score[i]);
}

ave=total/n;
printf("\nfor course%d total score is %d,average grade is %d",i+1,total,ave);
}
printf("\n");
}

最后部分,为total赋值,但是运算结果Total一直为0
但是在 for(j=0;j<n;j++)
{
total+=stu[j].score[i];printf("total %d",total);
printf("\n%d\n",stu[j].score[i]);
}
部分显示出来的是有效值?急
...全文
303 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
赵4老师 2017-09-28
  • 打赏
  • 举报
回复
printf里面的%和变量的一一对应关系 scanf里面的%和变量以及变量前加不加&的一一对应关系 是C代码中非常容易出错的地方,而且通常编译还不出错。 所以在编译源代码之前值得专门仔细检查一遍甚至多遍。
自信男孩 2017-09-28
  • 打赏
  • 举报
回复
对于double类型数据,建议还是用%lf输出,因为整型数据和浮点数在内存中的存放方式是不一样的。
kugeniha 2017-09-28
  • 打赏
  • 举报
回复
输出格式错误 。

69,382

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧