我正在学习在我的操作系统类中使用C,这是我到目前为止我的函数找到两个数组的交集。
一个交集基本上就是当你拿两套时,你只得到两组中的元素。
因此,例如,如果集合A包含= {1,2,3}并且集合B包含= {2,3,4},那么A和B的交集是{2,3}。我正在尝试在C中创建一个获取两个数组的函数,并返回一个包含两个传递数组的整数的数组。
我想我差不多有解决方案了,但我收到的错误是: “标识符'计数'未定义”
int intersection(int array1[4], int array2[4])
{
int arrayReturn[sizeof(array1) + sizeof(array2)]
int count = 0;
for(int i = 0; i < 4; i++)
{
for(int j = 0; j < 4; j++)
{
if(array1[i]==array2[j])
{
count = count + 1;
arrayReturn[count] = array1[i];
}
}
}
}
我非常习惯Java,我觉得Java和C几乎完全相同。我无法在这里找到错误,因为count在if语句的范围内。我没有看到计数是如何定义的。
计数有什么问题,如何修复此交叉函数?
答案 0 :(得分:3)
您在count
声明之前的行中缺少分号。
int arrayReturn[sizeof(array1) + sizeof(array2)]; //Semicolon Here
int count = 0;
我是如何看到错误的?
错误消息是identifier 'count' is undefined
所以我检查的第一件事就是编译器告诉我的原因。然而,这不是问题,因为声明存在,并且在正确的范围内。所以,现在该怎么办?我应该在变量初始化之前和使用之前的行查看该行。这是您肯定会发现错误的地方。
简而言之,当编译器消息似乎没有帮助时,请不要停止。环顾四周。
另外,正如GRAYgoose124指出的那样,你应该在函数体的末尾有一个return语句,因为你的函数应该返回一个整数。
答案 1 :(得分:1)
在这一行上缺少一个半冒号:
int arrayReturn[sizeof(array1) + sizeof(array2)]; //semicolon was missing
答案 2 :(得分:0)
AshRj指出,你错过了一个分号。
提示:clang编译器非常适合提供诊断输出。如果您尝试使用它编译代码,则会得到以下输出:
source.c:3:57: error: expected ';' at end of declaration
int arrayReturn[sizeof(array1) + sizeof(array2)]
^
;
即使您没有正常使用clang编译项目,也可以尝试编译片段以帮助您找出问题所在。就像你can see here一样,这就是我对你的代码片段所做的。 (请注意警告。)
答案 3 :(得分:0)
void readArr(int arr1[],int n1, int arr2[],int n2,int arr3[]){
int n=0;
int j=0;
for(j=0;j<n1;j++){
for(int k=0; k<n2;k++){
if(arr1[j]==arr2[k]){
int element = arr1[j];
int k=checkArrayContains(arr3,n,element);
if(k==1){
printf("%d\n",arr1[j] );
arr3[n]=arr1[j];
n++;
}
}
}
}
displayArray(arr3,n);}
我认为这种实现更为清晰。