0

从这段代码中,

node[4] = {5,3,2,6};  
neighbor[4] = {4,7,8,9};

我必须找到,

  • node[0]并且node[1]有任何共同的价值观neighbor[0-3]
  • node[1]并且node[2]有任何共同的价值来自neighbor[0-3]
  • ornode[2]和 node[3] 有任何共同的值neighbor[0-3]

如果任何人满足 print element found else not...
我已经尝试过这段代码,但是存在错误状态分段错误。

#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");
}
4

3 回答 3

3

您正在访问超出数组范围。

sub=k+1;

有了这个,您将 k 设置为 4,然后在随后的循环中,您访问node[sub]. 只有 0 到 3 是node.


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

    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 循环中的条件:sub < 4以确保您不会越界访问。


#include<stdio.h>

int present(int x, int y, int N[])
{
  int i, c=0;
  for(i=0;i<4;i++)
  {
      if(N[i]==x) c++;
      if(N[i]==y) c++;
  }
  if (c==2) return 1;
  return 0;
}

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

    for (k=0;k<3;k++){
        if (present(node[k], node[k+1], neighbor)) {
           flag = 1;
           printf("Element found");
           break;
        }
    }
    if(flag == 0) 
       printf("Element not found");

    return 0;
}
于 2012-12-25T15:18:23.387 回答
1

sub未定义/未设置,以防万一flag从未设置为1,因此您实际上是在使用未初始化的值作为索引,从而导致您的程序从它指向的任何地方读取。

于 2012-12-25T15:18:03.247 回答
0

这是完整的解决方案:

#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;
}
于 2012-12-25T15:20:38.650 回答