C语言链表输出乱码
如图,我打算做一个学生成绩管理系统,当选择“显示现有成绩记录”时会显示乱码,计算平均分时也会把乱码数据计算进去。个人感觉可能是函数feof()附近有问题,但一直未找出,求...
如图,我打算做一个学生成绩管理系统,当选择“显示现有成绩记录”时会显示乱码,计算平均分时也会把乱码数据计算进去。个人感觉可能是函数feof()附近有问题,但一直未找出,求大神解答。
相关代码如下:
void main(){ struct student *head,*q,*l; FILE *fp; int count=0; head=(struct student*)malloc(sizeof(struct student)); head->next=NULL; l=head; fp=fopen("D:\\student","ab+"); if(fp==NULL) { printf("can not open this file.\n"); exit(0); } while(!feof(fp)) { q=(struct student*)malloc(sizeof(struct student)); if(!q) { printf("memory malloc failure!\n"); exit(0); } if(fread(q,sizeof(struct student),1,fp)==1); { q->next=NULL; l->next=q; l=q; count++; } } fclose(fp); printf("\n共有学生成绩记录%d条\n",count); menu(head);} 展开
相关代码如下:
void main(){ struct student *head,*q,*l; FILE *fp; int count=0; head=(struct student*)malloc(sizeof(struct student)); head->next=NULL; l=head; fp=fopen("D:\\student","ab+"); if(fp==NULL) { printf("can not open this file.\n"); exit(0); } while(!feof(fp)) { q=(struct student*)malloc(sizeof(struct student)); if(!q) { printf("memory malloc failure!\n"); exit(0); } if(fread(q,sizeof(struct student),1,fp)==1); { q->next=NULL; l->next=q; l=q; count++; } } fclose(fp); printf("\n共有学生成绩记录%d条\n",count); menu(head);} 展开
3个回答
展开全部
q=(struct student*)malloc(sizeof(struct student));
malloc并不会给内存赋初值,用memset(q,0,sizeof(struct student));将初值赋为0;
如下,在q=(struct student*)malloc(sizeof(struct student));后面加上memset(q,0,sizeof(struct student));这一句.
malloc并不会给内存赋初值,用memset(q,0,sizeof(struct student));将初值赋为0;
如下,在q=(struct student*)malloc(sizeof(struct student));后面加上memset(q,0,sizeof(struct student));这一句.
追答
检查:计算时,有没有执行除0的操作,
之前没有进初始化时,你的计算会装乱码的内容进行计算,应该是在读文件的时候有问题,
另:存进语文件的数据都是以字符存进去的,用结构体直接将它读出来,是有风险的。
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
请你们寝室大神求助,分就不用给了,不谢
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询