Arrays 如何比较结构数组的两个成员?

Arrays 如何比较结构数组的两个成员?,arrays,c,structure,Arrays,C,Structure,我对比较一系列结构的两个成员有疑问。 我有一个函数,它接收两种不同结构的索引,并对它们进行比较。 最后,检查完所有字段后,函数必须返回一个表示相似性的整数 我制定了以下代码: int compareRecord(RecordSoggetto soggetto1, RecordSoggetto soggetto2) { int similiarity = 0; if (strcmp(soggetto1.name, soggetto2.name) == 0) simi

我对比较一系列结构的两个成员有疑问。 我有一个函数,它接收两种不同结构的索引,并对它们进行比较。 最后,检查完所有字段后,函数必须返回一个表示相似性的整数

我制定了以下代码:

int compareRecord(RecordSoggetto soggetto1, RecordSoggetto soggetto2) {
    int similiarity = 0;
    if (strcmp(soggetto1.name, soggetto2.name) == 0)
        similiarity += 7;
    if (strcmp(soggetto1.surname, soggetto2.surname) == 0)
        return similiarity += 7;
}
我这样调用函数:

printf("\nInsert first index");
scanf("%d", &first);
printf("\nInsert second index");
scanf("%d", &second);
similiarity = confrontaRecord(???);
printf("\nSimiliarity= %d%%", similiarity);
但现在我不知道调用函数时必须输入哪些参数,也不确定函数本身中的参数是否正确 结构如下:

 typedef struct {
     char name[DIM_NOME];
     char surname[DIM_COGNOME];
 } RecordSoggetto;

 RecordSoggetto soggetto[DIM_RECORD];

您能帮助我吗?

您的比较函数有未定义的行为。它不会在每个路径中返回一个值。更改如下:

int compareRecord(RecordSoggetto soggetto1, RecordSoggetto soggetto2){
  int similiarity=0;
  if (strcmp(soggetto1.name, soggetto2.name) == 0)
    similiarity+=7;
  if (strcmp(soggetto1.surname, soggetto2.surname) == 0)
    similiarity+=7;
  return similiarity;
}
关于电话:

similiarity = confrontaRecord(soggetto[first], soggetto[second]);
如果不想复制完整的结构,也只能传递它们的地址,这样可以获得更好的性能(复制的内存更少)。请注意,在本例中,我添加了
const
,因此
compareRecord
无法修改
记录。这有助于防止臭虫

int compareRecord(const RecordSoggetto* soggetto1, const RecordSoggetto* soggetto2){
  int similiarity=0;
  if (strcmp(soggetto1->name, soggetto2->name) == 0)
    similiarity+=7;
  if (strcmp(soggetto1->surname, soggetto2->surname) == 0)
    similiarity+=7;
  return similiarity;
}

similiarity = confrontaRecord(&soggetto[first], &soggetto[second]);

您可能正在寻找类似的内容–您希望通过引用传递记录,而不是像参数那样将其复制到裸结构中:

#include <stdio.h>
#include <string.h>

typedef struct {
  char name[32];
  char surname[32];
} RecordSoggetto;

int compareRecord(const RecordSoggetto *soggetto1, const RecordSoggetto *soggetto2) {
  int similiarity = 0;
  if (strcmp(soggetto1->name, soggetto2->name) == 0)
    similiarity += 7;
  if (strcmp(soggetto1->surname, soggetto2->surname) == 0)
    similiarity += 7;
  return similiarity;
}

// Statically allocated for example's sake
RecordSoggetto soggetto[] = {
    {.name = "asd", .surname = "dasd"}, {.name = "asd", .surname = "desd"},
};

int main() {
  int first = 0;  // would be prompted from user
  int second = 1;  // would be prompted from user
  int similiarity = compareRecord(&soggetto[first], &soggetto[second]);
  printf("Similiarity= %d%%", similiarity);
  return 0;
}
#包括
#包括
类型定义结构{
字符名[32];
查氏[32];
}记录索格托;
int比较记录(常数记录Soggetto*soggetto1,常数记录Soggetto*soggetto2){
内部相似性=0;
如果(strcmp(soggetto1->name,soggetto2->name)==0)
相似性+=7;
if(strcmp(soggetto1->姓氏,soggetto2->姓氏)==0)
相似性+=7;
回归相似性;
}
//为了举例,静态分配的
记录soggetto soggetto[]={
{.name=“asd”、.name=“dasd”}、{.name=“asd”、.name=“desd”},
};
int main(){
int first=0;//将由用户提示
int second=1;//将由用户提示
int-similiarity=比较记录(&soggetto[first]、&soggetto[second]);
printf(“相似性=%d%%”,相似性);
返回0;
}

似乎您想要
相似性=对抗记录(sogetto[第一],sogetto[第二]
@DavidRanieri它说:使用未声明的标识符'soggetto',这就是为什么你需要提供一个可编译的代码,你在
RecordSoggetto-soggetto[DIM_RECORD]中定义
sogetto
记录soggetto soggetto[DIM_记录];在main.c中我的函数(对抗记录)在函数中。这可能是问题吗?当然,这是问题,如果数组位于另一个翻译单元中,
main.c
无法访问该数组问题是我在main.c中声明了“Subject Record[DIM_Record];”,虽然函数是在structure.c中声明的,但有人建议我使用“extern”,所以程序可以运行,但我不知道它是否正常。我的项目被分割成几个文件(.c/.h),不幸的是,我的main中没有函数。我不知道我应该如何构造代码,使其能够在不使用extern的情况下工作:(如果您愿意,我可以将代码发送给您,这样您就知道我的意思。问题是,我在main.c中声明了“Subject Record[DIM_Record];”,而函数是在structure.c中声明的。有人建议我使用“extern”,所以程序可以运行,但我不知道它是否正常。我的项目被拆分为几个文件(.c/.h),不幸的是,我不能在main中包含函数。我不知道我应该如何构造代码,使其能够在不使用extern的情况下运行:(如果你愿意,我可以给你发代码,让你知道我在做什么mean@Zeld这是一个你在问题中没有提到的新问题。如果你在我们写了答案之后才提出其他问题,我们应该如何写一个好的答案?关于声明,用
extern records soggetto soggetto[DIM_RECORD]写一个
main.h
在其中(以及
DIM_记录
宏),然后#将此文件包含在main.c中以及需要
soggetto
的其他文件中。