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

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

MD.*_*sar 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;
}
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)