【问题标题】:How to return boolean in a function?如何在函数中返回布尔值?
【发布时间】:2021-01-05 03:17:50
【问题描述】:

我想比较两个数组。当数组中的任何元素不匹配时,我已将变量设置为 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;
}

【问题讨论】:

  • 但它没有返回那个。如果你不使用compare_arr的结果,你怎么知道返回的函数是什么?
  • 函数compare_arr()确实返回bool。但是main()使用返回的结果(例如,将返回的值存储在变量中,将其与另一个值进行比较)。如果你想使用main() 中的返回值,那么你需要明确地这样做——这不是靠魔法发生的。
  • 试过调试了吗?你的发现是什么?
  • 通常,continue 可以通过重写代码来消除,这样会更清晰。 for (int x = 0; x &lt; len_arr1; x++) { if (arr1[x] != arr2[x] { result = false; break; } }。我也倾向于删除breakfor (int x = 0; x &lt; len_arr1; x++) { if (arr1[x] != arr2[x] { return false; } } return true;

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


【解决方案1】:

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

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;
}

【讨论】:

    【解决方案2】:

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

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

    编码风格备注:

    你应该修复你的循环,因为你只使用第一个数组的长度,但如果第二个数组更小,你会得到一个段错误。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-09-06
      • 2021-10-29
      • 2013-03-11
      • 1970-01-01
      • 1970-01-01
      • 2015-02-17
      相关资源
      最近更新 更多