【发布时间】:2017-12-16 02:38:44
【问题描述】:
所以我对 C 非常了解,所以如果这是一个明显的问题,请原谅我。我无法弄清楚为什么在 selectedNode 函数中第一次返回正确的值,但对于所有其他函数返回 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
干杯。
【问题讨论】:
-
这个
for (int i; i < 8; i++)-->for (int i = 0; i < 8; i++) -
调高你的编译器警告级别,它应该发出关于使用未初始化变量的警告。
-
啊,干杯,是的。好像这不是警告一样。
-
@Blastfurnace:奇怪的是,在使用 MinGW 4.9.2 的 Windows 或使用 gcc 4.8.5 的 CentOS Linux 上,我没有收到关于 OP 代码的警告。我使用了 -Wall 和 -Wextra。
-
... 进行调试构建。我确实收到了构建发布版本的警告。很奇怪。
标签: c function for-loop struct