【发布时间】:2017-01-05 08:47:58
【问题描述】:
看看这个:
int find_grad(int * table, int * value)
{
int i = 0;
while (find_max_value(table) >= value)
{
table[(find_max_position(table))] = 0;
i++;
}
return i;
}
这是一个非常简单的函数:它使用另一个名为“find_max_position”的函数(确实有效,我测试过),它遍历整数向量以查找最大值的位置。所以如果向量是 {1, 3, 19},find_max_position 返回一个整数,在本例中为 1。
我需要 find_grad 来查找我输入的值的“等级”。例如,如果我在像 {0, 1, 5, 4, 3} 这样的向量上调用 find_grad(table, 3),该函数应该返回 2,因为 3 是第三个更大的值(它从 0 开始)。 但是当我调用该函数时,循环变得无限。我认为这可能是因为当我执行“table[(find_max_position(table))] = 0;”时我正在对向量的副本而不是向量本身进行操作,并且当循环重新启动较大的值时,它总是在那里。也许我解释的情况有点糟糕,但我认为阅读代码很容易理解。有人可以帮忙吗?
编辑:我忘记了 > find_max_value 只返回一个整数,即在整数向量上找到的较大值。
【问题讨论】:
-
鉴于
value是int*,find_max_value(table) >= value真的是正确的比较吗? -
如果您为编译器启用它们(
-Wall -Wextrafor gcc 和clang,例如)。 -
在这里发布整个代码。可能是您调用的函数导致了无限循环!
-
这是stats.c的全部代码,里面包含了我使用的所有函数ghostbin.com/paste/auxxh