为什么返回struct属性的C函数在第一次循环迭代后返回0?
所以我很了解C,所以如果这是一个明显的问题,请原谅我。我不明白为什么在为什么返回struct属性的C函数在第一次循环迭代后返回0?,c,function,for-loop,struct,C,Function,For Loop,Struct,所以我很了解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;
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);
}
干杯。在for循环中,您有一个未初始化的值
i
。未初始化的值包含垃圾
for (int i = 0; i < 8; i++)
在for循环中,有一个未初始化的值
i
。未初始化的值包含垃圾
for (int i = 0; i < 8; i++)
这
for(int i;i<8;i++)
-->for(int i=0;i<8;i++)
提高了编译器的警告级别,它应该发出一个关于使用未初始化变量的警告。啊,干杯,是的,这样做了。好像这并不是一个警告。@blastfurne:奇怪的是,我在Windows上使用mingw4.9.2或CentOS Linux上使用GCC4.8.5时,都没有收到关于OP代码的警告。我用了-墙和-Wextra。。。。进行调试构建。我确实得到了一个发布版本的警告。奇怪。这for(int i;i<8;i++)
-->for(int i=0;i<8;i++)打开编译器警告级别,它应该发出一个关于使用未初始化变量的警告。啊哈,干杯,是的。好像这并不是一个警告。@blastfurne:奇怪的是,我在Windows上使用mingw4.9.2或CentOS Linux上使用GCC4.8.5时,都没有收到关于OP代码的警告。我用了-墙和-Wextra。。。。进行调试构建。我确实得到了一个发布版本的警告。奇怪的
for (int i; i < 8; i++)
^