如何同时返回bool和double?

时间:2017-03-30 00:21:43

标签: c

在C中,我有一个计算a和b的乘积的函数。如果< b它返回false否则返回true。当函数定义为boolean时,如何返回产品?

bool multiplication(int a, int b)
{
    int c = a*b;
    if (a < b)
        return false;
    else
        return true;
}

3 个答案:

答案 0 :(得分:2)

  

如何同时返回bool和double?

一个函数只能有一种返回类型。但您可以使用包含bool和int成员的结构的变通方法,如其中一条注释中所述。

您可以通过以下方式实现使用递归逻辑编写正整数乘法函数的目标:

int multiplication(int a, int b) {
    if(b <= 1) return a;
    return a + multiplication(a, --b);
}

答案 1 :(得分:1)

有几种方法可以用来同时返回一个布尔值并加倍:

  1. 返回布尔值作为返回值,并返回double作为输出参数。
  2. 返回一个结构,该结构的布尔值为一个字段,double值为另一个字段。
  3. 返回布尔值作为返回值,并使用全局变量返回double值。
  4. 以下是这些解决方案的代码:

    bool multiplication(int a, int b, double* product)
    {
        *product = a * b;
        return a >= b;
    }
    

    struct retval {
        bool b;
        double p;
    }
    
    struct retval multiplication(int a, int b)
    {
        struct retval result;
        result.b = a >= b;
        result.p = a * b;
        return result;
    }
    

    最后:

    double product;
    
    bool multiplication(int a, int b)
    {
        product = a * b;
        return a >= b;
    }
    

    其中,第二个解决方案并不完全适合您的问题,因为它不再返回bool(而是返回struct,这可能在C中有其他缺点)。第三个解决方案,我鄙视因为我非常不喜欢使用全局变量(全局变量使得单元测试变得更难,使得使用函数不能成为纯函数,导致线程问题)。

    所以这留下了第一个解决方案。

    希望这能回答你的问题。

答案 2 :(得分:0)

  1. 您可以将新参数定义为输出。
  2. 定义包含bool和int数据的结构。 启动结构,然后返回它。