用c语言写一个简单的程序,定义一个结构体数组,输入结构体数组元素,并编写函数对结构体数组中插入记录;
时间: 2024-08-13 19:09:26 浏览: 47
在C语言中,你可以创建一个结构体数组并实现插入记录的功能。首先,你需要定义一个结构体(struct),然后声明一个该结构体类型的数组。这里是一个简单的示例:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义一个结构体类型
typedef struct {
int id;
char name[50];
} Record;
// 函数声明,用于在结构体数组中插入新的记录
void insertRecord(Record* array, int size, int index, int new_id, const char* new_name);
int main() {
// 定义结构体数组
Record records[10]; // 假设我们有10个记录的空间
// 初始化数组(这里仅为演示,实际应用可能需要用户输入)
for (int i = 0; i < 5; i++) {
printf("请输入第 %d 个记录的ID和姓名:\n", i+1);
scanf("%d%s", &records[i].id, records[i].name);
}
// 插入新记录
int index, new_id, new_index;
printf("请输入插入的位置(索引):");
scanf("%d", &index);
printf("请输入新记录的ID:");
scanf("%d", &new_id);
getchar(); // 为了读取回车符,避免后续字符错误
getchar();
printf("请输入新记录的名字:");
fgets(records[index].name, sizeof(records[index].name), stdin); // 使用fgets防止换行符丢失
// 插入后的新数组大小,考虑数组扩展
int newSize = sizeof(records) / sizeof(Record);
if (index >= newSize) { // 如果插入位置超过数组长度,则需要动态扩容
records = realloc(records, newSize * 2 * sizeof(Record)); // 扩容两倍
if (!records) {
perror("Realloc failed");
return 1;
}
newSize *= 2;
}
// 插入新记录
records[new_size] = records[index]; // 移动已存在记录
for (int i = newSize-1; i > index; i--) {
records[i] = records[i-1]; // 向后移动其他记录
}
records[index].id = new_id; // 设置新记录的ID
// 打印更新后的数组
printf("\n更新后的记录:\n");
for (int i = 0; i < newSize; i++) {
printf("ID: %d, Name: %s\n", records[i].id, records[i].name);
}
// 提供插入函数到主函数中的调用例子
insertRecord(records, newSize, index, new_id, records[index].name);
return 0;
}
// 在主函数中使用的插入函数,用于演示如何将其作为一个独立函数
void insertRecord(Record* array, int size, int index, int new_id, const char* new_name) {
if (size == 0 || index < 0) {
printf("错误的插入操作。\n");
} else {
// 这里只是一个占位函数,因为上面已经展示了如何手动完成插入
printf("插入记录函数被调用,但并未执行具体插入操作,因为主函数已经完成了插入过程。\n");
}
}
```
这个程序首先定义了一个`Record`结构体,接着在`main`函数中创建了一个结构体数组,并接收用户输入填充数据。之后,它提供了一个`insertRecord`函数的原型,但实际上在主函数中直接完成了插入操作,而不是作为单独的函数来调用。
阅读全文