这个循环是无限的,但它不应该是 - C
This loop is infinite but it should not be - C
看看这个:
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 returns 是一个整数,在本例中为 1.
我需要 find_grad 来找到我输入的值的 "grade"。例如,如果我在像 {0, 1, 5, 4, 3} 这样的向量上调用 find_grad(table, 3),函数应该 return me 2,因为 3是第三大值(从 0 开始)。
但是当我调用该函数时,循环变得无限。我认为这可能是因为当我执行 "table[(find_max_position(table))] = 0;" 时,我正在对向量的副本而不是向量本身进行操作,并且当循环重新启动时,较大的值始终存在。也许我解释的情况有点糟糕,但我认为阅读代码很容易理解。有人可以帮忙吗?
编辑:我忘了这 > find_max_value 只是 return 一个整数,在整数向量上找到的较大值。
你好像在比较指针,或者指针和整数。可能这不是你真正想要的。
问题是您正在将整数与指针进行比较。您在 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;
}
您正在比较 int
和指针。只需将 int find_grad(int * table, int * value)
行更改为 int find_grad(int * table, int 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;
}
这是一个非常简单的函数:它使用另一个名为 "find_max_position" 的函数(肯定有效,我测试过它),该函数遍历整数向量以找到最大值的位置。因此,如果向量是 {1, 3, 19},find_max_position returns 是一个整数,在本例中为 1.
我需要 find_grad 来找到我输入的值的 "grade"。例如,如果我在像 {0, 1, 5, 4, 3} 这样的向量上调用 find_grad(table, 3),函数应该 return me 2,因为 3是第三大值(从 0 开始)。 但是当我调用该函数时,循环变得无限。我认为这可能是因为当我执行 "table[(find_max_position(table))] = 0;" 时,我正在对向量的副本而不是向量本身进行操作,并且当循环重新启动时,较大的值始终存在。也许我解释的情况有点糟糕,但我认为阅读代码很容易理解。有人可以帮忙吗?
编辑:我忘了这 > find_max_value 只是 return 一个整数,在整数向量上找到的较大值。
你好像在比较指针,或者指针和整数。可能这不是你真正想要的。
问题是您正在将整数与指针进行比较。您在 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;
}
您正在比较 int
和指针。只需将 int find_grad(int * table, int * value)
行更改为 int find_grad(int * table, int value)
。这应该可以正常工作。