Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 阵列匹配结果分割错误_C_Arrays - Fatal编程技术网

C 阵列匹配结果分割错误

C 阵列匹配结果分割错误,c,arrays,C,Arrays,根据这一准则 node[4] = {5,3,2,6}; neighbor[4] = {4,7,8,9}; 我必须找到 节点[0]和节点[1]具有来自邻居[0-3] 或者节点[1]和节点[2]具有来自邻居[0-3] 或者节点[2]和节点[3]具有来自邻居[0-3] 如果任何一个满足打印元素,则发现其他元素不满足… 我已经尝试过这段代码,但有错误状态分段错误 #include<stdio.h> int main() { int node[4] = {5,3,2,6};

根据这一准则

node[4] = {5,3,2,6};  
neighbor[4] = {4,7,8,9};
我必须找到

  • 节点[0]
    节点[1]
    具有来自
    邻居[0-3]
  • 或者
    节点[1]
    节点[2]
    具有来自
    邻居[0-3]
  • 或者
    节点[2]
    和节点[3]具有来自
    邻居[0-3]
如果任何一个满足打印元素,则发现其他元素不满足…
我已经尝试过这段代码,但有错误状态分段错误

#include<stdio.h>

int main()
{
    int node[4] = {5,3,2,6};
    int neighbor[4] = {4,3,2,9};
    int sub,i,flag=0,k=0;

    for (k=0;k<3;k++){
        for (i = 0; i < 4; i++) {
            if (node[k]==neighbor[i])
                flag=1;
            break;
        }
    }
    if (flag==1)
        sub=k+1;
    for (i = 0; i < 4; i++) {
        if (node[sub]==neighbor[i])
            flag=2;
        break;
    }
    if (flag==2)
        printf("Element not found\n");
    else
        printf("Element  found\n");
}
#包括
int main()
{
int节点[4]={5,3,2,6};
int近邻[4]={4,3,2,9};
int sub,i,flag=0,k=0;

对于(k=0;k
sub
未定义/未设置,以防
flag
从未设置为
1
,因此您基本上使用未初始化的值作为索引,导致您的程序从其指向的任何位置读取。

sub
未定义/未设置,以防
flag
从未设置为
1
,因此,您将被忽略。)通常使用未初始化的值作为索引,导致程序从其指向的任何位置读取。

您正在访问数组的边界之外

sub=k+1;
这样,将k设置为4,然后在随后的循环中访问
节点[sub]
。只有0到3是
节点的有效索引


访问越界内存是未定义的行为。您可能想打破这两个循环

    for (k=0;k<3;k++){
        for (i = 0; i < 4; i++) {
            if (node[k]==neighbor[i])
            {
              flag=1;
              break;
            }
            if (flag == 1) break;
        }
    }

    if (flag==1) {
       sub=k+1;
       for (i = 0; i < 4 && sub < 4; i++) 
       {
            if (node[sub]==neighbor[i]) 
            {
              flag=2;
              break;
            }
      }
   }

for(k=0;k您正在访问数组的边界之外

sub=k+1;
这样,将k设置为4,然后在随后的循环中访问
节点[sub]
。只有0到3是
节点的有效索引


访问越界内存是未定义的行为。您可能想打破这两个循环

    for (k=0;k<3;k++){
        for (i = 0; i < 4; i++) {
            if (node[k]==neighbor[i])
            {
              flag=1;
              break;
            }
            if (flag == 1) break;
        }
    }

    if (flag==1) {
       sub=k+1;
       for (i = 0; i < 4 && sub < 4; i++) 
       {
            if (node[sub]==neighbor[i]) 
            {
              flag=2;
              break;
            }
      }
   }

for(k=0;k以下是完整的解决方案:

#include <stdio.h>
int main()
{
    int node[4] = {5,3,2,6};
    int neighbor[4] = {4,3,2,9};
    int i=0,j=0,k=0;

    for (i=0; i<4; i++) {
        for (j=0; j<4; j++) {
            if (node[i]==neighbor[j]) {
                for (k=0; k<4; k++) {
                    if (node[i+1]==neighbor[k]) {
                        printf("Element found: %d %d\n", node[i], node[i+1]);
                        return 0;
                    }
                }
            }
        }
    }
    printf("Element not found\n");
    return 0;
}
#包括
int main()
{
int节点[4]={5,3,2,6};
int近邻[4]={4,3,2,9};
int i=0,j=0,k=0;

对于(i=0;i,以下是完整的解决方案:

#include <stdio.h>
int main()
{
    int node[4] = {5,3,2,6};
    int neighbor[4] = {4,3,2,9};
    int i=0,j=0,k=0;

    for (i=0; i<4; i++) {
        for (j=0; j<4; j++) {
            if (node[i]==neighbor[j]) {
                for (k=0; k<4; k++) {
                    if (node[i+1]==neighbor[k]) {
                        printf("Element found: %d %d\n", node[i], node[i+1]);
                        return 0;
                    }
                }
            }
        }
    }
    printf("Element not found\n");
    return 0;
}
#包括
int main()
{
int节点[4]={5,3,2,6};
int近邻[4]={4,3,2,9};
int i=0,j=0,k=0;


对于(i=0;iDid你的意思是打破两个循环?并且有条件地?你需要一些大括号,我想…你的意思是打破两个循环吗?并且有条件地?你需要一些大括号,我想…节点[4]={5,3,2,6};邻居[4]={4,3,2,9};结果元素找到了正确的结果,但是当我将值更改为节点[4]={5,3,2,6};邻居[4]={4,8,2,9}仍然显示找到的元素。{2}节点本身与邻居{4,8,2,9}匹配。谢谢。仔细检查后发现算法也不正确(如果元素0,2和3匹配怎么办)?我已经更新了上面的代码,使用了不同的算法。节点[x]和节点[x+1]值必须与邻居节点匹配。如果两者都匹配,则打印输出为元素,否则找不到。但在您的代码中,如果输入为节点[4]={5,3,2,6};邻居[4]={4,3,2,9},则此处节点[1]和节点[2]与邻居匹配,但输出结果元素未找到更新的答案以包含完整解决方案。节点[4]={5,3,2,6};邻居[4]={4,3,2,9};results element find哪个是正确的,但是当我将值更改为node[4]={5,3,2,6};nexter[4]={4,8,2,9}时,它仍然显示元素find..node{2}单独与邻居{4,8,2,9}匹配,谢谢。仔细检查后,算法似乎也不正确(如果元素0,2,3匹配怎么办)?我已经更新了上面的代码,以使用不同的算法。节点[x]和节点[x+1]的值必须与相邻节点匹配。如果两者都匹配,则打印输出为元素,否则将不匹配。但是在您的代码中,如果输入为节点[4]={5,3,2,6};邻居[4]={4,3,2,9},这里是节点[1]和节点[2]与neighbor匹配,但输出结果元素not foundUpdated Response再次包含完整的解决方案。节点[4]={5,3,2,6};邻居[4]={4,3,2,9};结果元素found正确,但当我将值更改为节点[4]={5,3,2,6};邻居[4]={4,8,2,9}时仍显示找到的元素。.节点{2}单独与邻居{4,8,2,9}匹配我不知道你的程序应该做什么。你能解释一下你的目标是什么吗?你所说的公共值是什么意思?在这段代码中,节点[x]和节点[x+1]的值必须与相邻节点匹配。如果两者都匹配,则打印输出为元素,否则不会。但是如果我的输入为节点[4]={5,3,2,6};邻居[4]={4,8,2,9},这里是节点{2}单独与相邻元素匹配,但找到的输出结果元素
sub=k+1
没有问题,因为此时
k
的最大值将是
2
(请参见
以了解()
;因此应该可以)。此外,与其检查循环内的
flag==1
,我只需将其添加到外循环的条件中。@Mario我相信整个for循环应该在
if(flag==1)
内。因此,在访问
节点之前,即使sub小于4,也会设置
sub
。节点[4]={5,3,2,6};邻居[4]={4,3,2,9};results元素find which is correct,但当我将值更改为node[4]={5,3,2,6};neighbor[4]={4,8,2,9}时,它仍然显示元素find..node{2}单独与neighbor{4,8,2,9}匹配,我不确定你的程序应该做什么。你能解释一下你的目标吗?你所说的公共值是什么意思吗?在这段代码中,node[x]和node[x+1]值必须与邻居节点匹配。如果两者都匹配,则打印输出为元素,否则找不到。但如果我的输入为节点[4]={5,3,2,6};邻居[4]={4,8,2,9},此处为节点{2}单独与相邻元素匹配,但找到的输出结果元素
sub=k+1
没有问题,因为此时
k
的最大值将是
2
(请参见
以了解()
;因此应该可以)。此外,与其检查循环内的
flag==1
,我只需将其添加到外部循环的条件中。@Mario我相信整个for循环应该在
if(flag==1)
内。因此
su