这个循环是无限的,但它不应该是 - C.

时间:2016-08-29 10:40:34

标签: c loops vector infinite

看看这个:

 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只返回一个整数,在整数向量上找到的值越大。

3 个答案:

答案 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)即可。这应该可以正常工作。