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

Having trouble with return values for user-defined Functions

本文关键字:返回值 有问题 函数 定义 用户      更新时间:2023-10-16

我正在做一个简单的毕达哥拉斯函数用户输入两个数字,这两个数字都被传送到一个名为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: %.2lfn", 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 = %.2lfn", a, b, c);
    return c;
}

在我的电脑上,它一直工作到最后,Return c;由于某种原因,将值0返回给Main函数。(我测试了错误在哪里,因此在hypo函数中使用了printscreen。)

我想了解这个。

我很确定我的语法是错的,或者是我还没有读到的东西超出了我的头脑,但是经过一个小时的看书和查看youtube视频,我不明白为什么这不起作用。

编辑:

感谢大家的快速回复!我把它改成了双份,(在这个过程中我也意识到了我的错误),现在它像一个魅力。很高兴你们这么快就回答了,我一定会把它传给你们:)

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

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

当您可能想要double时,您的返回类型是int -小值将被强制转换并结果为0(即0.5在int中存储时为0)。

你得到0的确切原因是格式不匹配——你使用浮点格式来打印整数值。对于打印整数使用%d,但如果您正确指定hypo (double)的返回类型,此问题将消失。

您已经将变量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);

您有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,这将导致显示总是打印错误的答案。