gpt4 book ai didi

C:嵌套循环和数组的奇怪行为

转载 作者:行者123 更新时间:2023-12-01 11:56:30 25 4
gpt4 key购买 nike

我有一个 int 数组,它以我代码中别处创建的“\0”结尾。我知道它是 null 终止的,因为我已经测试过了。

比如说,对于这个例子,数组是 [7, 8, 9, 11, 12, '\0']

当我将它提供给我的函数时:

int edgesInCluster(Graph *g, int *nodes) {
int count = 0;
int i = 0;
int j = 0;
while(nodes[i] != '\0') {
while(nodes[j] != '\0') {
if(i<j) {
printf("%i %i\n", nodes[i], nodes[j]);
count += isNeighbour(g, nodes[i], nodes[j]);
}
j++;
}
i++;
}
return count;
}

printf 正在输出:

7 7
7 8
7 9
7 11
7 12

什么时候应该输出:

7 8
7 9
7 11
7 12
8 9
8 11
8 12
9 11
9 12
11 12

这意味着由于某种原因 'i' 没有递增(但我们可以看到它是递增的)或者 nodes[0] == '\0' 我们知道这是不正确的,因为循环与 ' j' 工作正常。

那么,有什么想法吗?

附言当我将 whiles 更改为 for 循环时,它会起作用,但前提是我知道“节点”的长度

最佳答案

在内部循环之后,您不会重置您的 j

但是为什么要写这么冗长的代码呢?试试这个:

size_t count = 0;

for (size_t i = 0; nodes[i]; ++i)
{
for (size_t j = i + 1; nodes[j]; ++j)
{
printf("%i %i\n", nodes[i], nodes[j]);
count += isNeighbour(g, nodes[i], nodes[j]);
}
}

return count;

(如果你想要严格的 ANSI C89,当然你必须将 ij 的声明从循环中拉出来。)

另请注意,'\0' 是一个值为 0 的 char 字面量,因此您也可以更准确地说是 0。而不是 if (x != 0) 你可以只说 if (x),这就是我在 for 循环中所做的。

关于C:嵌套循环和数组的奇怪行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6642819/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com