结构体组成的数组怎么让所有文件可以修改
时间: 2024-05-07 19:16:06 浏览: 33
要让所有文件都可以修改结构体组成的数组,可以使用全局变量来定义该数组。在一个文件中定义该数组,然后在其他文件中使用extern关键字声明该数组即可。这样所有文件都能够访问和修改该数组。
例如,在一个文件中定义一个结构体数组:
```c
// file1.c
#include <stdio.h>
struct Person {
char name[20];
int age;
};
struct Person people[100];
```
然后在其他文件中使用extern关键字声明该数组:
```c
// file2.c
extern struct Person people[100];
void add_person() {
// 修改数组
people[0].age = 20;
}
// file3.c
extern struct Person people[100];
void print_person() {
// 访问数组
printf("Name: %s, Age: %d\n", people[0].name, people[0].age);
}
```
这样在不同的文件中就可以访问和修改同一个结构体数组了。
相关问题
假设某班级n个同学的选课表,设计计算某位同学学分的函数 思路:动态内存分配+结构体数组+结构体指针变量 选课表组成:{学号,课程号,学分}。注:学号为字符串;一个学号可以对应多门课程 例如: {“1001”,”c language”,3.5; “1001”,”math”,6;”1001”,”english”, 5;”1002”,”c language”, 3.5}
好的,针对您的问题,我可以给出一个示例函数来计算某位同学的学分。首先,我们可以定义一个结构体来表示选课表中的一项记录,包括学号、课程号和学分:
```
struct Course {
char student_id[20];
char course_id[20];
float credit;
};
```
然后,我们可以定义一个结构体指针变量和一个动态分配的结构体数组来保存选课表的数据:
```
struct Course *courses;
int num_courses;
```
接下来,我们可以编写一个函数来读取选课表数据,并将其存储到动态分配的结构体数组中:
```
void load_courses() {
// 从文件或其他数据源读取选课表数据
// 假设选课表数据已经存储到了一个名为data的数组中
num_courses = /* 计算选课表中的记录数 */;
courses = (struct Course*) malloc(num_courses * sizeof(struct Course));
for (int i = 0; i < num_courses; i++) {
// 将data数组中的数据逐一读取到courses数组中的每个结构体变量中
}
}
```
最后,我们可以编写一个函数来计算某位同学的学分:
```
float calculate_credit(char *student_id) {
float credit = 0.0;
for (int i = 0; i < num_courses; i++) {
if (strcmp(courses[i].student_id, student_id) == 0) {
credit += courses[i].credit;
}
}
return credit;
}
```
这个函数会遍历所有的选课记录,找到与给定学号匹配的记录,并累加学分。
当然,这只是一个示例函数,实际应用中可能需要根据具体情况进行修改和调整。
阅读全文