看这个:
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;
}
Run Code Online (Sandbox Code Playgroud)
这是一个非常简单的函数:它使用另一个名为"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_grad(int * table, int * value)
{
int i = 0;
while (find_max_value(table) >= *value)
{
table[(find_max_position(table))] = 0;
i++;
}
return i;
}
Run Code Online (Sandbox Code Playgroud)
即使不使用指针也可以执行此操作.你只需要删除*之前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;
}
Run Code Online (Sandbox Code Playgroud)