我正在做一个简单的毕达哥拉斯函数 用户输入两个数字,这两个数字都被发送到一个名为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),它现在就像一个魅力。 非常高兴你们的回答速度有多快,我一定会把它传递给你:)
答案 0 :(得分:2)
当您可能需要int
时,您的返回类型为double
- 将输入小值并生成0(即存储在int
中时0.5为0)。
您获得0的确切原因是格式不匹配 - 您使用浮动格式来打印整数值。要打印整数使用%d
,但如果正确指定返回类型hypo
(double
),则此问题将消失。
答案 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);