求助
调试的时候出现了问题,问题的图片在代码下面
下面是代码
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<malloc.h>
#define compare(b) (strcmp((pStudents+i)->major,b))
void move(char *a,char *fp_paste);
int ReadStudentInfo(const char* filename,struct student** pStudents);
void Count(struct student pStudents[], int num);
void print(struct student *pStudents,int num);
struct student
{
char name[20];
char major[20];
int english;
int math;
int c;
int sum;
};
struct student *pStudents;
int pnumber[3]={0,0,0};
int score_ave[3]={0,0,0};
int main()
{
struct student *pStudents;
int num;
num=ReadStudentInfo("D:\\readme.txt",&pStudents);
if(num==-1)
{
printf("Failed to read information");
return 0;
}
Count(pStudents,num);
print(pStudents,num);
free(pStudents);
return 0;
}
int ReadStudentInfo(const char *filename,struct student **pStudents)
{
FILE *fp;
int i,j,b;
i=0;
if((fp=fopen(filename,"r"))==NULL)
{
exit(-1);
}
char fp1;
fp1=fgetc(fp);
while(fp1!=EOF)
{
if(fp1=='\n')
{
i++;
}
fp1=fgetc(fp);
}
char fp_paste[1000]={0};
*pStudents=(struct student*)malloc(sizeof(** pStudents)*i);
fseek(fp,0,0);
for(j=0;j<i;j++)
{
fgets(fp_paste,100,fp);
move((*(pStudents+j))->name,fp_paste);
move((*(pStudents+j))->major,fp_paste);
char english[10]={0};
char math[10]={0};
char c[10]={0};
move(&english[0],fp_paste);
(*(pStudents+j))->english=atoi(english);
b=atoi(english);
move(&math[0],fp_paste);
(*(pStudents+j))->math=atoi(math);
move(&c[0],fp_paste);
(*(pStudents+j))->c=atoi(c);
strcpy(fp_paste,fp_paste+1);
}
fclose(fp);
return i;
}
void move(char *a,char *fp_paste)/*将fp_paste中的一个信息移动到a中,并将fp_paste中剩下的信息往前移动*/
{
int b,i,flag;
flag=0;
for(i=0;*(fp_paste+i)!=' ';i++)
{
*(a+i)=*(fp_paste+i);
flag++;
}
*(a+i+1)=0;
strcpy(fp_paste,fp_paste+i+1);
}
void Count(struct student pStudents[], int num)
{
int i,tongxin_sum,wangluo_sum,wulianwang_sum;
tongxin_sum=0;
wangluo_sum=0;
wulianwang_sum=0;
for(i=0;i<num;i++)
{
(pStudents+i)->sum=(pStudents+i)->english+(pStudents+i)->math+(pStudents+i)->c;
if(compare("通信")==0)
{
tongxin_sum=tongxin_sum+(pStudents+i)->sum;
pnumber[0]++;
}
if(compare("网络")==0)
{
wangluo_sum=wangluo_sum+(pStudents+i)->sum;
pnumber[1]++;
}
if(compare("物联网")==0)
{
wulianwang_sum=wulianwang_sum+(pStudents+i)->sum;
pnumber[2]++;
}
}
score_ave[0]=tongxin_sum/pnumber[0];
score_ave[1]=wangluo_sum/pnumber[1];
score_ave[2]=wulianwang_sum/pnumber[2];
}
void print(struct student *pStudents,int num)
{
int i;
printf("__________________________________________________________\n");
printf("| 学生信息: |\n");
printf("|---------------------------------------------------------|\n");
printf("| 序号 姓 名 专业名称 英语成绩 线性代数成绩 C成绩 总成绩 |\n");
for(i=0;i<num;i++)
{
if(strlen((pStudents+i)->name)==9||strlen((pStudents+i)->major)==9)
printf("| %d %s %s %d %d %d %d |\n",i+1,(pStudents+i)->name,(pStudents+i)->major,(pStudents+i)->english,(pStudents+i)->math,(pStudents+i)->c,(pStudents+i)->sum);
if(strlen((pStudents+i)->name)==6||strlen((pStudents+i)->major)==6)
printf("| %d %s %s %d %d %d %d |\n",i+1,(pStudents+i)->name,(pStudents+i)->major,(pStudents+i)->english,(pStudents+i)->math,(pStudents+i)->c,(pStudents+i)->sum);
if(strlen((pStudents+i)->name)==9||strlen((pStudents+i)->major)==6)
printf("| %d %s %s %d %d %d %d |\n",i+1,(pStudents+i)->name,(pStudents+i)->major,(pStudents+i)->english,(pStudents+i)->math,(pStudents+i)->c,(pStudents+i)->sum);
if(strlen((pStudents+i)->name)==6||strlen((pStudents+i)->major)==9)
printf("| %d %s %s %d %d %d %d |\n",i+1,(pStudents+i)->name,(pStudents+i)->major,(pStudents+i)->english,(pStudents+i)->math,(pStudents+i)->c,(pStudents+i)->sum);
}
printf("| |\n");
printf("| 统计信息: |\n");
printf("|---------------------------------------------------------|\n");
printf("| 序号 专业名称 学生人数 平均成绩 |\n");
printf("| 1 通信 %d %d |\n",pnumber[0],score_ave[0]);
printf("| 2 网络 %d %d |\n",pnumber[1],score_ave[1]);
printf("| 3 物联网 %d %d |\n",pnumber[2],score_ave[2]);
printf("|_________________________________________________________|\n");
return;
}
readme里包含着
数字末尾都带有一个空格