首页 > 解决方案 > 如何比较结构数组的两个成员?

问题描述

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

我做了这个代码:

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];

你能帮助我吗?

标签: arrayscstructure

解决方案


您的比较函数具有未定义的行为。它不会在每个路径中都返回一个值。像这样改变它:

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]);

如果您不想复制完整的结构,您也可以只传递它们的地址,这会带来更好的性能(复制的内存更少)。请注意,在这种情况下,我添加constcompareRecord无法修改RecordSoggettos. 这有助于防止错误。

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]);

推荐阅读