簡體   English   中英

布爾變量正在更改,我不知道為什么— C語言

[英]Boolean variable is changing and I don't know why — C language

我編寫了一個主要函數來測試searchRecursive,該函數具有一個值(用於搜索),一個數組和一個表示數組大小的int值。 運行以下代碼時,found的值為false。 我不明白 #2顯然在下面的數組中,因此它應該返回true。

運行程序的結果:

This should return true
0

如果您從上面運行該程序的結果看一看,將會看到到達該塊的位置,該塊應返回true,但是它從主函數打印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;      
}

更改這些行

searchRecursive(value, array, midpoint);

return searchRecursive(value, array, midpoint);

您必須返回遞歸調用的結果。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM