在函数中利用scanf为结构体数组赋值

结构体数组指针作为函数参数,通过数组的首地址与偏移量对结构体数组进行scanf的赋值,在函数中通过指针间接访问到其指向的内存


程序当中,编写函数,输入5个学号(int),5个姓名(字符串),5个成绩数组(每组三个成绩)(int[3]),依次调用函数,最后打印

#include <stdio.h>
#include <stdlib.h>


struct student  //建立结构体,学号,姓名,3门课的分数
{
int num;
char name[10];
int score[3];
}Stu[5];          //初始化,一共5个学生的数据




void getScore(struct student * p)  //函数:向结构体读取分数,一共三门课
{
int i, j;
for (i = 0; i < 5; i++)
for (j = 0; j < 3; j++)
scanf_s("%d", (&(p+i)->score[j]));
}


void getNum(struct student * p)  //函数:向结构体读取学号
{
int i;
for (i = 0; i < 5;i++)
scanf_s("%d", &(p + i)->num);
}


void getName(struct student * p)  //函数:向结构体读取姓名
{
int i;
for (i = 0; i < 5; i++)
scanf("%s", &(p + i)->name);
}
int main()
{
int i, j, average[3] = { 0 };   //average数组储存每门课的平均分
getNum(Stu);            //函数调用
getName(Stu);
getScore(Stu);


for (j = 0; j < 3; j++)
{
for (i = 0; i < 5; i++)
average[j] += Stu[i].score[j];

}


for (i = 0; i < 5; i++)
{
printf("num = %d name = %s Score:", Stu[i].num, Stu[i].name);  //依次打印学号 姓名
//printf("%d %d %d", Stu[0].score[0],Stu[0].score[1],Stu[0].score[2]);


for (j = 0; j < 3; j++)    //打印三门课的分数
printf(" %d", Stu[i].score[j]);
printf("\n");
}


printf("average:");


for (i = 0; i < 3; i++)
printf("%f ", (float)average[i]/5);   //打印三门课平均分


printf("\n");




system("pause");
return 0;


}



评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值