求助c语言高手

来源:百度知道 编辑:UC知道 时间:2024/05/15 23:50:29
有10个学生,每个学生有三门课程成绩,从键盘输入以上成绩(包括学生学号,姓名,三门课程成绩),计算出平均成绩,将所有数据用空格分开,与平均成绩一并按每人一行的格式存入文件stu.dat中。按平均成绩由高到低输出到屏幕(要求有学号,平均成绩,排名序号。读写文件和排序输出必须用函数)。
#include <stdio.h>
struct student
{int num;
char name[10];
float ave,score[3];
}stud[3];
void save()
{FILE *fp;
int i;
if((fp=fopen("stu.dat","wb"))==NULL)
{printf("cannot open file\n" );
return;
}
for(i=0;i<3;i++)
if(fwrite(&stud[i],sizeof(struct student),1,fp)!=1)
printf("file write error\n");
fclose(fp);
}
orde(struct student *p)
{ int i,j;
FILE *fp;
struct student q;
fp=fopen("stu.dat","rb");
for(i=j+1;i<3;i++)
if((p+i)->ave<(p+j)->ave)
{q=*(p+i);*(p+i)=*(p+j);*(p+j)=q;
}

}
void main()
{int i,j,sum;

float m, e, c,n,w,a;

prin

在你的orde(struct student *p) 函数中,i,j定义的时候 都没有付初值,这时候i 和j的值时不定的,导致了if((p+i)->ave<(p+j)->ave) 内存访问越界。
在main()函数里,e 的定义不应该是float,应该是char e[10];因为它是用来输入名字的,应该是字符串,或者字符数组。

main() 函数的printf()语句,各市部分要求打印8个参量,参数部分只给出了6个,将导致内存错误。

程序写得挺乱的,仔细检查一下吧。

没有缩进,看着不舒服

二楼讲得有道理!^-^