2017-07-11 95 views
0

所以我對C很瞭解,所以如果這是一個明顯的問題,請原諒我。我不知道爲什麼在selectedNode函數中第一次返回正確的值,而其他所有函數都返回0。它通過length屬性從struct中被訪問。這是我的代碼。爲什麼C函數在第一次循環迭代後返回結構屬性返回0?

#include <stdio.h> 
#include <stdlib.h> 

typedef struct { int x; int y; } VECTOR; 
typedef struct { VECTOR nodes[8]; int length; } NODE_LIST; 

VECTOR Deltas[8] = {{-2, 1}, {-2,-1}, {-1,-2}, { 1,-2}, 
        { 2,-1}, { 2, 1}, { 1, 2}, {-1, 2}}; 

NODE_LIST NodeSuccessors(VECTOR node) 
{ 
    NODE_LIST successors; 
    int count = 0; 
    for (int i; i < 8; i++) 
    { 
     VECTOR N = {node.x + Deltas[i].x, node.y + Deltas[i].y}; 
     if ((N.x < 8) && (N.y < 8) && (N.x >= 0) && (N.y >= 0)) 
     { 
      successors.nodes[count] = N; 
      count++; 
     } 
    } 
    successors.length = count; 
    return successors; 
} 

int SelectedNode(NODE_LIST nodelist) 
{ 
    int bestNode = 8; // the most a node could have. 
    int len = 0; 
    for (int n = 0; n < nodelist.length; n++) 
    { 
     len = NodeSuccessors(nodelist.nodes[n]).length; 
     printf("%d, ", len); 
     if (len < bestNode) 
     { 
      bestNode = len; 
     } 
    } 
    return bestNode; 
} 

int main() 
{ 
    VECTOR node = {4,4}; 
    NODE_LIST nNodes = NodeSuccessors(node); 

    int best = SelectedNode(nNodes); 
    printf("\nresult: %d\n", best); 
} 

電流產生的輸出是:

8, 0, 0, 0, 0, 0, 0, 0, result: 0 

乾杯。

+8

實施例本'對(INT I; I <8;我++)' - >'的for(int i = 0; I <8; i ++在)' –

+2

調高編譯器警告級別,它應該發出關於使用未初始化變量的警告。 – Blastfurnace

+0

ahhh歡呼是的,做到了。好像這不是作爲警告。 –

回答

3

在你的for循環中,你有一個未初始化的值i。未初始化的值包含垃圾。

for (int i = 0; i < 8; i++) 

如果你已經爲你的編譯器打開了一個編譯器選項,它會警告你。與gcc -Wall -Werror

error: variable 'i' is uninitialized when used here [-Werror,-Wuninitialized]

for (int i; i < 8; i++) 
     ^