所以我很了解C,所以如果这是一个明显的问题,请原谅我。我无法解决为什么selectedNode
函数第一次返回正确的值而其他所有值都返回0。它是通过length属性从结构内部访问的。这是我的代码。
#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
干杯。
答案 0 :(得分:3)
在for循环中,您有一个未初始化的值i
。未初始化的值包含垃圾。
for (int i = 0; i < 8; i++)
如果您为编译器启用了编译器选项,它会警告您。 gcc -Wall -Werror
错误:变量'i'在此处使用时未初始化 [-Werror,-Wuninitialized]
for (int i; i < 8; i++) ^