用户定义函数的返回值有问题
Having trouble with return values for user-defined Functions
我正在做一个简单的毕达哥拉斯函数用户输入两个数字,这两个数字都被传送到一个名为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,这将导致显示总是打印错误的答案。
- 反转具有返回值的字符串时出现问题
- 使用函数的元组返回多个值的问题
- 是否有一些东西限制了未来引入多个返回值C++标准?
- 如果函数的返回值将用作右值引用而不是左值,有没有办法使函数具有不同的行为?
- 返回值是否会有临时被销毁?
- 动态指针引用数组由三元运算符返回值,但有异常
- 为什么 GCC 无法优化,除非返回值有名称?
- 有没有办法为任何函数编写通用代码,以便它可以(异步)执行并从线程池中获得返回值?
- 有条件的操作员从其参数的副本中返回值
- C - 如何编写一个函数,返回真实有价值函数的导数,而不是导数的值
- 关于如何在函数执行后使用和获取返回值的问题
- memset() 返回值有什么用?
- 在JNA中,GlobalAlloc和GlobalLock的返回值有什么不同
- 返回值优化问题
- 返回值复制问题(以改进调试时间)-- 这里的解决方案是什么?
- 多次调用同一函数返回值的问题
- 用户定义函数的返回值有问题
- try-catch对char**返回值有影响
- 布尔值返回两次有问题(Arduino)
- 使用c++在mysql数据库表中插入多个值有问题