1

我正在做一个简单的毕达哥拉斯函数用户输入两个数字,这两个数字都被运送到一个名为 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;
}

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

我想明白这一点。

我很确定我的语法有误,或者有些我还没有读过的东西让我不知所措,但是在浏览书籍和检查 youtube 视频一个小时后,我不明白为什么这不起作用.

编辑:

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

4

4 回答 4

2

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

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

于 2013-03-05T22:11:47.500 回答
2

您需要将返回类型更改为双精度:

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;
}
于 2013-03-05T22:12:11.507 回答
1

hypo返回了一个int,但您正在使用它,就好像它是一个double. 您应该将其切换为:

double hypo(double a, double b);

并且,在实施中:

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

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

于 2013-03-05T22:11:10.153 回答
1

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

double c;

但是您正在尝试返回int

int hypo(double a, double b);

您应该更改 to 的返回类型hypodouble强制c转换为int。但是,强制转换会丢弃任何分数(将 2.678 变为 2):

return (int)c;

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

double hypo(double a, double b);
于 2013-03-05T22:11:44.393 回答