2012-12-25 24 views
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]
  • 或如果任何一個滿足印刷元素以極不...
    我曾嘗試這個代碼,但有錯誤狀態分段錯誤210和節點[3]具有neighbor[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"); 
} 
+0

您的意思是打出來的兩個*循環*?並有條件?你會需要一些大括號,我認爲... – Ryan

回答

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; 
} 
+0

在這種情況下,'sub = 0'默認情況下,對吧? – Daniel

+0

節點[4] = {5,3,2,6};鄰居[4] = {4,3,2,9}; results元素找到哪個是正確的,但是當我改變值爲節點[4] = {5,3,2,6};鄰居[4] = {4,8,2,9}它仍然顯示找到元素..node {2}單獨與鄰居{4,8,2,9}相匹配 – Reshmy

+0

謝謝。經仔細檢查後發現算法也是不正確的(如果元素0,2和3匹配)?我已經更新了我的代碼以使用不同的算法。 – Daniel

1

sub未定義/未設置,萬一所以你基本上是使用未初始化的值作爲索引flag永遠不會設置爲1,導致你的程序無論它指向閱讀。

3

您正在訪問數組的邊界。

sub=k+1; 

這樣,您將k設置爲4,然後在隨後的循環中訪問node[sub]。對於node,只有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循環的條件: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; 
} 
+0

node [4] = {5,3,2,6}; neighbor [4] = {4,3,2,9}; results元素找到哪個是正確的,但是當我改變值爲節點[4] = {5,3,2,6};鄰居[4] = {4,8,2,9}它仍然顯示找到元素..node {2}單獨與鄰居{4,8,2,9}匹配 – Reshmy

+0

我不確定你的程序應該做什麼。你能解釋你想達到的目標嗎?你的意思是什麼?*共同價值*? –

+0

在此代碼中,節點[x]和節點[x + 1]的值必須與鄰居節點相匹配。如果兩者都匹配打印輸出爲元素,否則不匹配。 但是如果我輸入爲節點[4] = {5,3,2,6};鄰居[4] = {4,8,2,9},這裏節點{2}單獨與鄰居匹配,但輸出結果元素髮現 – Reshmy