我正在完成一项需要不同来源和标题的学校作业。
我有data.h
,其中包含以下结构信息。
typedef struct volunteer{
int hours;
int tasksCompleted;
}volunteer;
typedef struct employee{
float salary;
int serviceYears;
int level;
}employee;
typedef struct person{
char firstName[20];
char lastName[20];
char telephoneNum[20];
union{
employee e;
volunteer v;
};
}newPerson;
然后我有一个volunteer.c
和employee.c
,其中包含处理打印记录,按姓名搜索某人等内容的功能等。
一个mainMenu.c
,显示菜单并接受用户输入以添加个人记录。
最后,mainProgram.c
将它们联系在一起。
我想有一群人[20],我必须能够访问它们(获取,设置等)。 我的主要问题在于,我不确定初始化人员阵列的适当位置在哪里,我不确定在哪里为人员创建get / set函数。 < / p>
我试着在mainMenu.c的主函数中初始化,如此。
int main(){
//mainMenu();
//menu();
newPerson person[20];
strcpy(person[0].firstName, "George");
strcpy(person[0].lastName, "Michaels");
strcpy(person[0].telephoneNum, "5645651232");
person[0].v.hours= 44;
person[0].v.tasksComplete = ;
printf("The name is = %s\n", person[0].firstName);
printf("The number of tasks completed is = %d\n", person[0].v.tasksCompleted);
//testing my addFirstName method below, 1 for person[1] since I already did person [0]
addFirstName(1);
return 0;
}
我只是想确保在向人[0]添加信息后能够正确访问/阅读,所以现在主要内容没什么重要的。
然后我有一个addFirstName(int num)
函数,可以从menu.c中调用。 (但是从mainProgram.c atm测试它)。我不确定这是否是最好的方法,但是菜单会计算从0开始添加的记录数。所以int num = 0,并且将是addFirstName(0);
void addFirstName(int num){
char firstName[20];
printf("\n\tEnter Volunteer's first name: ");
scanf("%20s", firstName);
strcpy(person[num].firstName, firstName);
}
但是,当我尝试这样做的时候,即使我在main函数中初始化,它也表示该人未申报。这让我觉得我没有在理想的地方初始化人群。
如果我将一个struct人作为函数参数会更好吗?
对不起,如果我的问题有点乱。基本上我只想知道初始化人数组的最合理的位置/方法在哪里,以及获得/设置我的get / set方法的最佳位置/方法,因为我需要获取/设置person
我的其他来源,(volunteer.c,employee.c,mainMenu.c)
答案 0 :(得分:1)
void addFirstName(newPerson *const person){
char firstName[20];
printf("\n\tEnter Student's first name: ");
scanf("%20s", firstName);
strcpy(person->firstName, firstName);
}
在main.c中
addFirstName(&person[1]);
答案 1 :(得分:0)
你的函数addFirstName正在引用在main中声明的数组,这就是为什么它表示未声明的人。
就像你说的那样,你可以将person数组作为函数参数,它将起作用
void addFirstName(newPerson *person, int num){
char firstName[20];
printf("\n\tEnter Student's first name: ");
scanf("%20s", firstName);
strcpy(person[num].firstName, firstName);
}
关于初始化人员阵列的方法的最佳方式,这取决于你,你可以拥有自己的风格并选择最适合你的方式,因为你已经拥有{{1 }和volunteer.c
,也许嵌套逻辑步骤为employee.c