这个循环是无限的,但它不应该是 - 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)。这应该可以正常工作。