通过编译了,但无法打印结果
值得一提的是我在多次插入printf语句时竟然看到有几次打印出了正确结果。。
求解答 是书上的一道例题,但我想用动态分配做
#include<stdio.h> //malloc memset
#include<stdlib.h>
#include<string.h>
struct student {
char name[20];//姓名
short fresult;//期末成绩
short cresult;//班级成绩
char su; //是否学生会
char west; //是否西部学生
short paper; //论文
};
int main(void){
struct student *Student=NULL;
int n;
scanf("%d",&n);
Student=(struct student *)malloc(n*sizeof(int));
if(Student==NULL) exit(1);
memset(Student,0,n*sizeof(int));
int i;
for(i=0;i<n;i++){
scanf("%s %d %d %c %c %d",&Student[i].name,&Student[i].fresult,&Student[i].cresult,&Student[i].su,&Student[i].west,&Student[i].paper);
}//输入
printf("44");
int ssum=0;
int *sum=NULL;
sum=(int *)malloc(n*sizeof(int));
if(sum==NULL) exit(1);
memset(sum,0,n*sizeof(int));
for(i=0;i<n;i++){
sum[i]=0;
}
for(i=0;i<n;i++){
if(Student[i].fresult>80&&Student[i].paper!=0) sum[i]+=8000;
if(Student[i].fresult>85&&Student[i].cresult>80) sum[i]+=4000;
if(Student[i].fresult>90) sum[i]+=2000;
if(Student[i].fresult>85&&Student[i].west=='Y') sum[i]+=1000;
if(Student[i].cresult>80&&Student[i].su=='Y') sum[i]+=850;
}
int max=0;
for(i=0;i<n;i++){
ssum+=sum[i];
if(sum[max]<sum[i])
max=i;
}
printf("%s\n",Student[max].name);
printf("%d\n",sum[max]);
printf("%d\n",ssum);
free(Student);
free(sum);
return 0;
}
Student=(struct student *)malloc(n*sizeof(int));
改为
Student=(struct student *)malloc(n*sizeof(student);
你的程序里面分配的内存太小了