如何在函数中返回布尔值?

时间:2020-09-18 07:49:56

标签: c++ algorithm boolean equality function-definition

我想比较两个数组。当数组中的任何元素都不匹配时,我将变量设置为true,并且它为false。我想返回该变量,它是一个布尔值,但它不返回该变量。为什么呢?

bool compare_arr(int arr1[], int len_arr1, int arr2[] ,int len_arr2){
    cout << "Compare the two Arrays"<< endl;
    bool result = true;

    for(int x = 0; x < len_arr1; x++)
    {
        if(arr1[x]==arr2[x])
        {
            continue;   
        }
        else
        {
            result = false;
            break;
        }
    }
    
    return result;
}

int main()
{
    int arr1[] = {1,2,3,4};
    int len_arr1 = sizeof(arr1)/sizeof(arr1[0]);

    int arr2[] = {1,2,3,4};
    int len_arr2 = sizeof(arr2)/sizeof(arr1[0]);

    compare_arr(arr1,len_arr1,arr2,len_arr2);
        
    return 0;
}

2 个答案:

答案 0 :(得分:3)

您没有使用函数调用的返回值

compare_arr(arr1,len_arr1,arr2,len_arr2);

例如,您可以写

std::cout << compare_arr(arr1,len_arr1,arr2,len_arr2) << '\n';

#include <iomanip>

//...

std::cout << std::boolalpha << compare_arr(arr1,len_arr1,arr2,len_arr2) << '\n';

但是在任何情况下,如果数组中元素的数量不同,您的函数都可以调用未定义的行为。

可以使用标准算法std::equal来简化函数的编写。例如

#include <algorithm>

//...

bool compare_arr( const int arr1[], size_t len_arr1, const int arr2[], size_t len_arr2 )
{
    return std::equal( arr1, arr1 + len_arr1, arr2, arr2 + len_arr2 );
}

请注意,使用sizeof运算符的表达式结果的类型为size_t。所以你应该写个例子

size_t len_arr1 = sizeof(arr1)/sizeof(arr1[0]);
^^^^^^

相应地,用于指定数组中元素数量的函数参数也应为size_t类型。

如果您可能不使用标准算法,则可以通过以下方式声明和定义函数

bool compare_arr( const int arr1[], size_t len_arr1, const int arr2[], size_t len_arr2 )
{
    bool result = len_arr1 == len_arr2;

    for ( size_t i = 0; result && i < len_arr1; i++ )
    {
        result = arr1[i] == arr2[i];
    } 

    return result;
}

答案 1 :(得分:1)

正如David所写,您忽略了返回值。您需要将返回值分配给变量才能使用它。

const bool compare_result = compare_arr(arr1,len_arr1,arr2,len_arr2);

关于编码风格的说明:

您应该修复循环,因为您仅使用第一个数组的长度,但是如果第二个数组的长度较小,则会出现段错误。

当您将问题标记为C ++时,请考虑使用std :: vector而不是c数组。