微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

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

我想比较两个数组。当数组中的任何元素都不匹配时,我将变量设置为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,4};
    int len_arr2 = sizeof(arr2)/sizeof(arr1[0]);

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

解决方法

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

compare_arr(arr1,len_arr1,arr2,len_arr2);

例如,您可以写

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

#include <iomanip>

//...

std::cout << std::boolalpha << compare_arr(arr1,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 + 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_arr2 )
{
    bool result = len_arr1 == len_arr2;

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

    return result;
}
,

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

const bool compare_result = compare_arr(arr1,len_arr2);

关于编码风格的说明:

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

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。