16、定义一个结构体数组,输入结构体数组元素,并编写函数对结构体数组中删除记录;
时间: 2024-08-13 15:07:46 浏览: 56
C#调用C++DLL传递结构体数组的终极解决方案
5星 · 资源好评率100%
在C语言中,我们可以定义一个结构体数组并为其提供输入。首先,我们需要定义一个结构体类型,假设我们的结构体叫`Person`,包含姓名`name`和年龄`age`。然后,我们定义一个`Person`类型的数组,并创建一个函数来删除指定位置的记录。
```c
#include <stdio.h>
#include <string.h>
// 定义结构体
struct Person {
char name[50];
int age;
};
// 函数声明,用于删除结构体数组中的记录
void deleteRecord(struct Person arr[], int index, int size);
int main() {
// 定义结构体数组并输入数据
struct Person people; // 假设最多5个记录
int i;
printf("请输入%zd个人的信息:\n", sizeof(people) / sizeof(people));
for (i = 0; i < sizeof(people) / sizeof(people); i++) {
printf("请输入第%d个人的姓名: ", i + 1);
fgets(people[i].name, sizeof(people[i].name), stdin); // 使用fgets防止换行符
people[i].name[strcspn(people[i].name, "\n")] = '\0'; // 去除多余的换行符
printf("请输入第%d个人的年龄: ", i + 1);
scanf("%d", &people[i].age);
}
// 删除记录
int recordToDelete;
printf("请输入要删除的记录索引(0-%d): ", sizeof(people) / sizeof(people) - 1);
scanf("%d", &recordToDelete);
// 在主函数中检查索引是否合法
if (recordToDelete >= 0 && recordToDelete < sizeof(people) / sizeof(people)) {
deleteRecord(people, recordToDelete, sizeof(people) / sizeof(people));
} else {
printf("无效索引。\n");
}
// 输出修改后的数组
for (i = 0; i < sizeof(people) / sizeof(people); i++) {
printf("记录 %d: 姓名: %s, 年龄: %d\n", i, people[i].name, people[i].age);
}
return 0;
}
// 删除记录的函数实现
void deleteRecord(struct Person arr[], int index, int size) {
memmove(&arr[index], &arr[index + 1], (size - 1] = (struct Person){0}; // 或者设置最后一个元素为默认清理值
}
```
阅读全文