看看这个:
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只返回一个整数,在整数向量上找到的值越大。答案 0 :(得分:6)
问题是你要将整数与指针进行比较。您在*
之前错过了value
。
正确的代码:
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;
}
即使不使用指针,也可以这样做。您只需要在*
之前删除value
。
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;
}
答案 1 :(得分:2)
好像你在比较指针,指针和整数。可能这不是你真正想要的。
答案 2 :(得分:1)
您正在比较int
和指针。只需将第int find_grad(int * table, int * value)
行更改为此int find_grad(int * table, int value)
即可。这应该可以正常工作。