用户定义函数的返回值有问题

时间:2013-03-05 22:08:26

标签: c++ function return

我正在做一个简单的毕达哥拉斯函数 用户输入两个数字,这两个数字都被发送到一个名为Hypo的用户定义函数,而hypo应该返回一个值C,这就是答案。

这是我的剧本。

#include <stdio.h>
#include <stdlib.h>
#include <math.h>

int hypo(double a, double b);

int main(void)
{ 
   double one, two;
   //user inputs two variables
   scanf("%lf %lf", &one, &two );
   printf("Your C number is: %.2lf\n", hypo(one, two));

   system("PAUSE"); 
   return 0;
}

/*-------------------------------------------------------------------------*/

int hypo(double a, double b)
{
    double c;
    c = sqrt((a*a)+(b*b));
    printf("Currently, A = %.2lf, and B = %.2lf, C = %.2lf\n", a, b, c);

    return c;
}

在我的电脑上,它一直工作到最后,返回c;由于某种原因,将值0返回给Main函数。 (我测试过看错误的位置,因此在hyp函数中进行了printcreening。)

我想明白这一点。

我很确定我的synax错了,或者我还没读过的东西已经过了我的脑袋,但经过一个小时的浏览书籍和查看YouTube视频,我不明白为什么这不是不工作

编辑:

谢谢大家的快速回复!我把它变成了一个双倍,(在这个过程中实现我的错误也是xD),它现在就像一个魅力。 非常高兴你们的回答速度有多快,我一定会把它传递给你:)

4 个答案:

答案 0 :(得分:2)

当您可能需要int时,您的返回类型为double - 将输入小值并生成0(即存储在int中时0.5为0)。

您获得0的确切原因是格式不匹配 - 您使用浮动格式来打印整数值。要打印整数使用%d,但如果正确指定返回类型hypodouble),则此问题将消失。

答案 1 :(得分:2)

您需要将返回类型更改为double:

double hypo(double a, double b)
{
    double c;
    c = sqrt((a*a)+(b*b));
    printf("Currently, A = %.2lf, and B = %.2lf, C = %.2lf\n", a, b, c);

    return c;
}

答案 2 :(得分:1)

hypo返回int,但您正在使用它,就像它是double一样。你应该把它切换到:

double hypo(double a, double b);

并且,在实施中:

double hypo(double a, double b)
{
    double c;
    // ...

当您以int身份返回时,结果值c将被截断为int,而不是显示完整值。对于任何小于1.0的正数,这将导致它转换为0。此外,您的格式字符串指定了一个double,并且您正在传递一个int,这将导致显示始终打印错误的答案。

答案 3 :(得分:1)

您已将变量c定义为double类型:

double c;

但您正在尝试返回int

int hypo(double a, double b);

您应该将hypo的返回类型更改为double或将c转换为int。但是,施法将丢掉任何分数(使2.678变成2):

return (int)c;

因此我建议您将返回类型更改为double,这在尝试计算斜边(可能包含小数位数)时更合乎逻辑:

double hypo(double a, double b);