gpt4 book ai didi

c - 避免使用相似的结构重复代码 C

转载 作者:行者123 更新时间:2023-12-04 09:15:50 25 4
gpt4 key购买 nike

我在一个有 3 个相似结构的程序中工作。

typedef struct{
int id;
Person p;
}Client;

typedef struct{
int id;
Person p;
}Employee;

typedef struct{
int id;
Person p;
}Provider;

制作的数据保存在三个不同的文件中。函数使用的大部分信息来自 Person p;并且都是相似的(制作客户/员工/提供者,列出他们等)。问题是,因为它们是三种不同的结构,所以我必须将每个作业的代码重复三次,以从每个人中提取信息或制作数组来对文件进行排序。我想不出使用正确类型的单一代码来避免问题的方法。示例代码:

`

int extractNameProvider(){
FILE *arch;
int ret=0;
Provider pro;
arch=fopen("fileP","rb");
if(arch!=NULL){
fread(&cli,sizeof(Provider),1,arch);
printf("%s",pro.p.name);
fclose(arch);
}
else{
ret=-1;
}
return ret;
}

int extractNameClient(){
FILE *arch;
int ret=0;
Client cli;
arch=fopen("fileC","rb");
if(arch!=NULL){
fread(&cli,sizeof(Client),1,arch);
printf("%s",cli.p.name);
fclose(arch);
}
else{
ret=-1;
}
return ret;
}

int extractNameEmployee(){
FILE *arch;
int ret=0;
Employee emp;
arch=fopen("fileE","rb");
if(arch!=NULL){
fread(&emp,sizeof(Employee),1,arch);
printf("%s",emp.p.name);
fclose(arch);
}
else{
ret=-1;
}
return ret;
}

最佳答案

如果所有的 struct 都是相同的,你可以在你的文件中共享一个基本的 structtypedef,比如:

/* base.h */
struct BasePerson{
int id;
Person p;
};

/* client.h */
#include "base.h"
typedef struct BasePerson Client;

/* employee.h */
#include "base.h"
typedef struct BasePerson Employee;

/* provider.h */
#include "base.h"
typedef struct BasePerson Provider;

然后:

int extractNamePerson(char *file){
FILE *arch;
int ret=0;
struct BasePerson person;
arch=fopen(file,"rb");
if(arch!=NULL){
fread(&person,sizeof(struct BasePerson),1,arch);
printf("%s",person.p.name);
fclose(arch);
}
else{
ret=-1;
}
return ret;
}

关于c - 避免使用相似的结构重复代码 C,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51877493/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com