C++ 用户定义函数的返回值有问题
我在做一个简单的勾股函数 用户输入两个数字,两个数字都被发送到一个名为Hypo的用户定义函数,Hypo应该返回一个值C,这就是答案 这是我的剧本C++ 用户定义函数的返回值有问题,c++,function,return,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
#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;
}
#包括
#包括
#包括
int hypo(双a,双b);
内部主(空)
{
双一双,;
//用户输入两个变量
扫描频率(“%lf%lf”、&1和&2);
printf(“您的C编号为:%.2lf\n”,hypo(一,二));
系统(“暂停”);
返回0;
}
/*-------------------------------------------------------------------------*/
int hypo(双a,双b)
{
双c;
c=sqrt((a*a)+(b*b));
printf(“当前,A=%.2lf,B=%.2lf,C=%.2lf\n”,A,B,C);
返回c;
}
在我的电脑上,它一直工作到最后,返回c;出于某种原因,它将值0返回给主函数。(我测试了错误的位置,因此在hypo函数中进行了打印筛选。)
我想了解这一点
我很确定我的synax搞错了,或者有些东西我还没读过,但在翻阅书籍和查看youtube视频一个小时后,我不明白为什么这不起作用
编辑:
谢谢大家的快速回复!我把它改成了双色(意识到我在这个过程中也犯了错误xD),现在它就像一个符咒一样工作。
很高兴你们回答得这么快,我一定会把它传下去:)你们有
hypo
返回int
,但你们使用它就像它是一个双
。您应该将其切换到:
double hypo(double a, double b);
在实施过程中:
double hypo(double a, double b)
{
double c;
// ...
当以
int
返回时,结果值c
将被截断为int
,而不是显示完整值。这将导致任何小于1.0的正数转换为0。此外,您的格式字符串正在指定一个双精度,您正在传递一个int,这将导致显示器总是打印错误的答案。您有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
定义为double类型:
double c;
但您正试图返回一个int
:
int hypo(double a, double b);
您应该将hypo
的返回类型更改为double
或将c
转换为int
。但是,铸造将丢弃任何分数(将2.678变成2):
因此,我建议您将返回类型改为double
,这在尝试计算斜边(可能包含小数位数)时也更符合逻辑:
您已将变量
c
定义为双精度类型:
double c;
但您正试图返回一个int
:
int hypo(double a, double b);
您应该将hypo
的返回类型更改为double
或将c
转换为int
。但是,铸造将丢弃任何分数(将2.678变成2):
因此,我建议您将返回类型改为double
,这在尝试计算斜边(可能包含小数位数)时也更符合逻辑:
当您可能需要
double
时,您的返回类型为int
——小值将被强制转换,结果为0(即当存储在int
中时,0.5为0)
获取0的确切原因是格式不匹配-使用浮点格式打印整数值。对于打印整数,请使用
%d
,但如果正确指定hypo
的返回类型(double
),则此问题将消失。当您可能需要double
时,返回类型为int
——小值将被强制转换,结果为0(即存储在int
中时,0.5为0)
获取0的确切原因是格式不匹配-使用浮点格式打印整数值。要打印整数,请使用
%d
,但如果正确指定hypo
的返回类型(double
),此问题将消失。您需要将返回类型更改为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;
}
您需要将返回类型更改为双精度:
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;
}
@彼得格尔肯斯:当然是编译的
double
到int
是一种标准转换,C型变量函数不提供任何类型检查。这里最大的问题是使用<代码> SCANF和int
是一种标准转换,C型变量函数不提供任何类型检查。这里最大的问题是使用<代码> SCANF