结构体数组的指针传递(在同一个工程的不同文件中)
在一个子函数的文件中我进行输入#include <stdio.h>
#define N 100
struct STUDENT
{
long long stu_ID;
char stu_name[10];
float score;
}student[N], *stu;
void grade_add(int num)
{
int i;
printf("请输入%d个学生的学号,姓名,成绩:\n",num);
for(i = 0; i < num; i++)
{
scanf("%lld%s%f",&student[i].stu_ID,&student[i].stu_name,&student[i].score);
}
stu = student;
printf("成绩录入已完成!\n");
/* for(i=0; i<n; i++)
{
printf("%lld %s %.1f\n",(stu+i)->stu_ID,(stu+i)->stu_name,(stu+i)->score);
}
*/
return &stu;
}然后返回结构体的首地址
然后再在主函数的文件中接收
#include <stdio.h>
#include<stdlib.h>
#include<string.h>
#include "chose.h"//头函数的 .h 文件
void yesorno();
void meun()
{
int n, m, *stu;
printf (" 1:学生成绩新增\n 2:学生成绩查询\n 3:学生成绩修改\n 4:学生成绩删除\n 5:学生成绩全览\n\
6:班级成绩统记\n 0:退出\n");//菜单子函数
printf("请输入你选择的选项n:\n");
scanf ("%d",&n);
while(n != 0)//判断是否想退出
{
switch(n)
{
case 1:
printf("********成绩新增*********\n");
printf ("请输入班级人数:");
scanf("%d",&m);
stu = grade_add(m);//得到地址
break;
case 2:
score_inquiry(stu,m);//成绩查询,在这个子函数中调用那个地址
break;
case 3:
printf ("学生成绩修改待完成\n\n");
break;
case 4:
grade_delete();//学生成绩删除子函数
break;
case 5:
grade_all();//学生成绩全览子函数
break;
case 6:
printf ("班级成绩统计待完成\n\n");
break;
default:
printf ("input error!\n");
}
meun();
}
yesorno();
}
void yesorno()//退出程序
{
char ch;
printf ("确定退出系统?(Y/N)\n");
getchar();
ch = getchar();
if(ch == 'Y'|| ch == 'y')
{
printf ("OVER!\n");
exit(0);
}
else if (ch == 'N' || ch == 'n')
meun();
}
调用的函数
#include <stdio.h>
void score_inquiry(const struct STUDENT *Stu,int num)
{
//printf ("学生成绩查询待完成\n\n");
int i;
for(i=0; i<num; i++)
{
printf("%lld %s %.1f\n",Stu[i].stu_ID, Stu[i].stu_name, Stu[i].score);
}
}
然后就报错了