Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/135.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 用户定义函数的返回值有问题_C++_Function_Return - Fatal编程技术网

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

我在做一个简单的勾股函数 用户输入两个数字,两个数字都被发送到一个名为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;
}
#包括
#包括
#包括
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和 PROTFF ,而不是类型安全的C++等价物。@ PiTeGeRKENS:当然编译。code>double到
int
是一种标准转换,C型变量函数不提供任何类型检查。这里最大的问题是使用<代码> SCANF
Print Fux/Cube >,而不是类型安全的C++等价物。错误的结果是格式字符串不匹配(int vs double),不是舍入的结果。错误的结果是格式字符串不匹配(int vs double),不是四舍五入的结果。错误的结果是因为格式字符串不匹配(int vs double),而不是四舍五入的结果。错误的结果是因为格式字符串不匹配(int vs double),而不是四舍五入的结果。感谢您的解释,当我阅读您的解决方案时,这是一个“Doh!”错误,但细节和解释将确保我不会再弄错了!:)感谢您的解释,当我阅读您的解决方案时,这是一个“Doh!”错误,但是详细信息和exp