【问题标题】:Boolean variable is changing and I don't know why -- C language布尔变量在变化,我不知道为什么——C语言
【发布时间】:2015-07-15 04:36:12
【问题描述】:

我编写了一个 main 函数来测试 searchRecursive,它接受一个值(要搜索)、一个数组和一个表示数组大小的 int。运行下面的代码时,found 的值为 false。我不明白这一点。 #2 显然在下面的数组中,所以它应该返回 true。

运行程序的结果:

This should return true
0

如果您查看上面运行此程序的结果,您会看到该块已到达应该返回 true 的位置,但它正在从 main 函数打印一个 0,这意味着它是 false。

bool found = false;

int main(void)
{
    int values[5]={1,2,3,4,5};

    found = (search (2, values, 5));
    printf("%d\n", found);      
}

/**
 * Returns true if value is in array of n values, else false.
 */
bool search(int value, int values[], int n)
{

    // if int isn't positive, return false
    if (n < 0)
    {
        return false;
    }
    else
    {   
      return (searchRecursive(value, values, n));
    }
}

bool searchRecursive(int value, int values[], int n)
{
    // if the first value of array matches the value, return true
    if (values[0] == value)
    {
        return true;
    }

    // if the first value of the array doesn't match the value and the 
    //   length is 1, return false
    else if ((values[0] != value && n==1) || n<1)
    {
        return false;
    }

    // if n is greater than 1 and value is greater than midpoint, divide 
    //   array, reassign value of n and call searchRecursive
    else if (n > 1) 
    {
        int midpoint = n/2;
        int newSize = midpoint;

        if (value == values[midpoint])
        {
            printf("This should return true\n");
            return true;
        }

        else if (value > values[midpoint])
        {
            int array[midpoint-1];

            for (int x=0; x < newSize; x++)
            {
                array[x] = values[midpoint + 1];
                midpoint++;
            }

            searchRecursive(value, array, midpoint);
        }

        else if (value < values[midpoint])
        {
            int array[midpoint];

            for (int x=0; x < midpoint; x++)
            {
                array[x] = values[x];
            }              

            searchRecursive(value, array, midpoint);
        }
        else
        {
            return false;
        }   
    }
    else
    {
        return false;
    }
        return false;      
}

【问题讨论】:

  • 你使用调试器了吗?
  • 相当多的地方需要改进。首先:found = search (2, values, 5); 此外,如果if 部分中有return,则不需要else
  • else if ((values[0] != value &amp;&amp; n==1) || n&lt;1)更改为else if(n &lt;=1)并删除下一个else

标签: c boolean-logic


【解决方案1】:

更改这些行

searchRecursive(value, array, midpoint);

return searchRecursive(value, array, midpoint);

您必须返回递归调用的结果。

【讨论】:

  • 谢谢!你太棒了!
猜你喜欢
  • 1970-01-01
  • 2019-08-11
  • 1970-01-01
  • 2019-09-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-14
  • 2016-01-27
相关资源
最近更新 更多