c语言关于指针的编程,【C语言】关于结构体指针

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼

输入学生学号姓名和三门成绩 然后若有一门不及格 输出全部个人信息 然后按照平均分重新排序再次输出 为什么我学生人数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);}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值