要求用C语言编写: 且1.编写一个带结构的文件,存入电脑, 2.从电脑中读入一个带结构的文件,并进行删增改后,重新存入电脑, 3.文件是有纵横结构,每横表示一个记录
时间: 2024-03-11 22:45:10 浏览: 56
用C语言编写数据结构可以上机实现
好的,你的问题是要我用C语言编写一个带结构的文件,实现文件的删、增、改操作,对吧?
首先,我们需要定义一个结构体来表示每个记录,比如:
```c
typedef struct {
int id; // 记录的编号
char name[20]; // 姓名
int age; // 年龄
char address[50]; // 地址
} Record;
```
然后,我们可以定义一个文件,每个记录占一行,用逗号分隔不同字段,比如:
```
1,张三,20,北京市海淀区
2,李四,25,上海市浦东新区
3,王五,30,广州市天河区
```
接着,我们可以编写一个函数来读取文件中的记录,比如:
```c
int read_records(const char* filename, Record* records, int max_records) {
FILE* fp = fopen(filename, "r");
if (!fp) {
return -1;
}
int count = 0;
char line[100];
while (fgets(line, sizeof(line), fp)) {
if (count >= max_records) {
break;
}
char* p = line;
records[count].id = strtol(p, &p, 10);
p++; // skip comma
strcpy(records[count].name, p);
p = strchr(p, ',') + 1;
records[count].age = strtol(p, &p, 10);
p++; // skip comma
strcpy(records[count].address, p);
count++;
}
fclose(fp);
return count;
}
```
这个函数会把文件中的记录读取到一个数组中,并返回读取到的记录数。
接下来,我们可以编写一个函数来写入记录到文件中,比如:
```c
int write_records(const char* filename, const Record* records, int count) {
FILE* fp = fopen(filename, "w");
if (!fp) {
return -1;
}
for (int i = 0; i < count; i++) {
fprintf(fp, "%d,%s,%d,%s\n",
records[i].id, records[i].name,
records[i].age, records[i].address);
}
fclose(fp);
return 0;
}
```
这个函数会把一个数组中的记录写入到文件中。
最后,我们可以编写增、删、改函数来操作记录,比如:
```c
int add_record(Record* records, int max_records, int* count,
int id, const char* name, int age, const char* address) {
if (*count >= max_records) {
return -1;
}
records[*count].id = id;
strcpy(records[*count].name, name);
records[*count].age = age;
strcpy(records[*count].address, address);
(*count)++;
return 0;
}
int remove_record(Record* records, int count, int id) {
for (int i = 0; i < count; i++) {
if (records[i].id == id) {
for (int j = i; j < count - 1; j++) {
records[j] = records[j+1];
}
count--;
return 0;
}
}
return -1;
}
int update_record(Record* records, int count, int id,
const char* name, int age, const char* address) {
for (int i = 0; i < count; i++) {
if (records[i].id == id) {
strcpy(records[i].name, name);
records[i].age = age;
strcpy(records[i].address, address);
return 0;
}
}
return -1;
}
```
这几个函数分别实现了增加、删除和修改记录的功能。其中,增加记录需要指定记录的编号、姓名、年龄和地址;删除记录需要指定记录的编号;修改记录需要指定记录的编号、姓名、年龄和地址。
这样,我们就可以通过组合这些函数来实现一个完整的带结构的文件的增删改查功能了。
阅读全文