该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
输入学生学号姓名和三门成绩 然后若有一门不及格 输出全部个人信息 然后按照平均分重新排序再次输出 为什么我学生人数2的时候是对的 到了3以上就不行了 对结构体指针的各种问题弄不清啊 结构体交换的时候只交换地址可以吗
然后调试的时候 发现input函数就有问题 比如5个人 不进入函数内部 输入以后 出现access violation,进入内部的话 在scanf一部不输入数字继续按f11他竟然就结束了调试。。。。难道给结构体指针变量赋值不能用scanf?
求解释 指针太特么折腾了。。。
#include
struct score
{
double c1;
double c2;
double c3;
};
typedef struct score score;
struct student
{
int ID;
char name[20];
score s;
double ave;
};
typedef struct student M;
void input(struct student *pa,int n);
void sort(struct student *pa,int n);
void output(const struct student *pa,int n);
int main()
{
M *a;
int num;
int i;
do {printf("请输入学生总数:\n");
scanf("%d",&num);}
while (num<=0);
input(a,num);
for (i=0;i
if((((a+i)->s.c1)<=60)||(((a+i)->s.c2)<=60)||(((a+i)->s.c3)<=60))
{printf("%d\t%s\t%lf\t%lf\t%lf\t%lf\t",(a+i)->ID,(a+i)->name,(a+i)->s.c1,(a+i)->s.c2,(a+i)->s.c3,(a+i)->ave);}
sort(a,num);
output(a,num);
return 0;
}
void input(struct student *pa,int n)
{
int i;
for(i=0;i
{scanf("%d%s%lf%lf%lf",&((pa+i)->ID),(pa+i)->name,&((pa+i)->s.c1),&((pa+i)->s.c2),&((pa+i)->s.c3));
((pa+i)->ave)=((pa+i)->s.c1)/3+((pa+i)->s.c2)/3+((pa+i)->s.c3)/3;
}
}
void sort(struct student *pa,int n)
{
int i,j,k;
M temp;
for(i=0;i
{k=i;
for(j=i+1;j
{if(((pa+i)->ave)>((pa+j)->ave))
{k=j;}
}
if(k!=i)
{temp=*(pa+j);
*(pa+j)=*(pa+i);
*(pa+i)=(temp);
}
}
}
void output(const struct student *pa,int n)
{
int i;
for (i=0;i
{printf("%d\t%s\t%lf\t%lf\t%lf\t%lf\t",(pa+i)->ID,(pa+i)->name,(pa+i)->s.c1,(pa+i)->s.c2,(pa+i)->s.c3,(pa+i)->ave);}
}