二进制==介于' int'和' struct member'当两个值都是int时

时间:2015-12-22 05:14:54

标签: c arrays struct

我有一个结构数组,里面有一个数组。

struct member{
int num;
char name[10];
int m[5];
int counter;
}ptr[10];

我试图键入一个条件,比较结构中数组的值和包含结构的数组的值。当我进行二进制比较时,我得到的错误是' int'另一个是结构成员。 struct成员也是一个int(一个带int值的数组),为什么我会遇到这个问题呢?

void checkiffriends(){
for(i=0; i < 10; i++){
    for(j=0; j < 5; j++){
        if(ptr[i].m[j] == ptr[i+1]){
            printf("they are friends!", );
        }
     }
  }
}

6 个答案:

答案 0 :(得分:4)

你不是在比较两个整数。你试图将m [j]与它所在的结构进行比较。也许你的意思是ptr [i] .num或.counter

答案 1 :(得分:2)

ptr[i].m[j] == ptr[i]可能意味着ptr[i].m[j] == i揭示了算法中的一个缺陷。

我假设m数组代表&#34的索引;我是......的朋友。&#34;那个ptr[i]。因此,对于给定的ptr[i],您希望列出他的所有朋友,意思是

  • 检查所有其他 ptr[j]i!=j,然后查看i是否在其他人的m列表中&#34; person& #34;

这个假设是否正确?

这会导致像

这样的东西
void checkiffriends(){
   int i,j,k;
   for(i=0; i < 10; i++){
      for(j=0; j < 10; j++){
         if (i != j) {
            for(k=0; k < 5; k++){
               if(ptr[j].m[k] == i){
                  printf("%d is friend of %d\n", j, i); // indexes
                  printf("%s is friend of %s\n", ptr[j].name, ptr[i].name); // names
               }
            }
         }
      }
   }
}

答案 2 :(得分:1)

ptr[i]是一个结构。 ptr[i].m[j]是一个整数。

您无法将结构与整数进行比较。

您可以比较两个结构,或两个整数。

  

struct成员也是一个int(具有int值的数组)

这是错误的。 struct 包含整数数组。所以比较它们没有意义。

答案 3 :(得分:0)

目前还不清楚你想要做什么,但根据你的错误判断,可能就是这样:

void checkiffriends(){
for(i=0; i < 10; i++){
    for(j=0; j < 5; j++){
        if(ptr[i].m[j] == i){ //Change from ptr[i] to i
            printf("they are friends!", );
        }
     }
  }
}

答案 4 :(得分:0)

如果我猜对了,你想在变量m中存储struct member reference。

struct member{
   int num;
   char name[10];
   struct member* m; //correction
   int counter;
}ptr[10];

答案 5 :(得分:0)

你在if条件下尝试过(i + 1)而不是ptr [i + 1]。我认为这是避免错误的更好方法。