C语言结构体数组初始化```从键盘输入

/*定义一个4个元素的STUDENT结构体数组保存四个学生的信息,求这四个学生的平均年龄。
(要求求平均年龄的功能用函数实现) */
#include<stdio.h>
struct STUDENT{
char name[20];
int age;
char sex;
int weight;
};
int aver(struct STUDENT *q,int n);
main()
{
struct STUDENT a[4];
struct STUDENT *p;
int ave,i;
p=a;
printf("请输入四个学生的数据:\n");
for(i=0; i<4; i++)
{
p=a;
printf("请输入第%d个学生的姓名:\n",i+1);
gets((p+i)->name);
printf("请输入第%d个学生的年龄,性别和体重:\n",i+1);
scanf("%d%c%d",&((p+i)->age),&((p+i)->sex),&((p+i)->weight));

}
ave=aver(p,4);
printf("四个学生的平均年龄是:%d",ave);
}
int aver(struct STUDENT *q,int n)
{
int ping,i,sum;
sum=0;
for(i=0; i<n; i++,q++)
{
sum+=q->age;
}
ping=sum/n;
return(ping);
}

大家帮我看看``我这个样子输入有什么不对```我认为没有什么问题,但是...

程序有什么问题吗?
我找不出错误来
但是出来的结构每次都和我预想的不一样
请各个达人们帮帮忙

输入姓名时用scanf,不要用gets.gets会把上一个scanf("%d%c%d",&((p+i)->age),&((p+i)->sex),&((p+i)->weight)); 输入数据时,最后那个回车接收到,结果就等于你直接输入了一个回车,还没输入姓名.
而且建议
scanf("%d%c%d",&((p+i)->age),&((p+i)->sex),&((p+i)->weight));
这句,把%d%c%d之间加上分隔符,比如%d,%c,%d,或者%d %c %d
温馨提示:答案为网友推荐,仅供参考
第1个回答  2007-04-29
因为没有分,所以大家都不愿意给你改,现在都是有偿劳动小朋友。
第2个回答  2007-04-29
用了全局变量........

#include<stdio.h>

struct STUDENT{
char name[20];
int age;
char sex;
int weight;
};
int aver(struct STUDENT *q,int n);
struct STUDENT a[4];

int aver(int n)
{
int ping,i,sum;
sum=0;
for(i=0; i<n; i++)
{
sum+=a[i].age;
}
ping=sum/n;
return(ping);
}

void main()
{

//struct STUDENT *p;
int ave,i;
printf("请输入四个学生的数据:\n");
for(i=0; i<4; i++)
{
printf("请输入第%d个学生的姓名:\n",i+1);
gets(a[i].name);
printf("请输入第%d个学生的年龄,性别和体重:\n",i+1);
scanf("%d%c%d",&(a[i].age),&(a[i].sex),&(a[i].weight));

}
ave=aver(4);
printf("四个学生的平均年龄是:%d",ave);
}
相似回答