Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/16.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 - Fatal编程技术网

C 一个函数的返回值工作正常,第二个函数的返回值不能反映正确的值

C 一个函数的返回值工作正常,第二个函数的返回值不能反映正确的值,c,function,C,Function,基本上我有两个功能。函数1,calculateGamma返回角度。这是我的功能原型: double calculateGamma(int l1, int l2, int l3) { double eqn1Numer = (pow(l1, 2) + pow(l2, 2) - pow(l3, 2)); double eqn1Denom = 2 * l1 * l2; double angleY = acos(eqn1Numer / eqn1Denom); return

基本上我有两个功能。函数1,calculateGamma返回角度。这是我的功能原型:

double calculateGamma(int l1, int l2, int l3) {
    double eqn1Numer = (pow(l1, 2) + pow(l2, 2) - pow(l3, 2)); 
    double eqn1Denom = 2 * l1 * l2;
    double angleY = acos(eqn1Numer / eqn1Denom);
    return angleY;
}
double radiusMethod1(int angleYres, int l1, int l2, int l3) {
    printf("Angle Y: %lf\n", angleYres);
    printf("%d %d %d", l1, l2, l3);```
}
我使用以下语句调用函数:

angleYres = calculateGamma(l1, l2, l3);
我的第二个函数radiusMethod1使用calculateGamma的返回值。 (我已经检查过,angleYres的实际值是正确的,我可以在main中打印。)

这是我的第二个功能:

double calculateGamma(int l1, int l2, int l3) {
    double eqn1Numer = (pow(l1, 2) + pow(l2, 2) - pow(l3, 2)); 
    double eqn1Denom = 2 * l1 * l2;
    double angleY = acos(eqn1Numer / eqn1Denom);
    return angleY;
}
double radiusMethod1(int angleYres, int l1, int l2, int l3) {
    printf("Angle Y: %lf\n", angleYres);
    printf("%d %d %d", l1, l2, l3);```
}
如果我在main中打印角度,则值为1.44568。如果我在函数radiusMethod1中打印angleYres(我在函数main中定义的angleY),它将返回0.0000。这让我很困惑,因为l1、l2和l3都打印到正确的输出:200、250、300,这是我从另一个函数中获得的三个值

我的问题是:如何从calculateGamma中获取返回值angleY,以便在函数radiusMethod2中使用

我尝试过使用与l1、l2、l3相同的方法重新分配函数,但它的工作方式似乎不同;这让我很困惑,因为我认为我在使用相同的方法

这是我的原始代码,包括疑难解答注释/打印等

#include <stdio.h>
#include <math.h>

int readLength(void) {
    int length;
    printf("Please enter a side (largest value last): ");
    scanf("%d", &length);
    return length;
}

double calculateGamma(int l1, int l2, int l3) {
    double eqn1Numer = (pow(l1, 2) + pow(l2, 2) - pow(l3, 2)); // Equation 1 calculation
    double eqn1Denom = 2 * l1 * l2;
    double angleY = acos(eqn1Numer / eqn1Denom);
    return angleY;
}

double radiusMethod1(int angleYres, int l1, int l2, int l3) {
    printf("Angle Y: %lf\n", angleYres);
    printf("%d %d %d", l1, l2, l3);
}

/*double radiusMethod2(int l1, int l2, int l3) {
    double valS = (.5) * (l1 + l2 + l3); // calculates value under the square root
    double eqn2Numer = (pow(valS * (valS - l1) * (valS - l2) * (valS - l3), 0.5));
    double radiusT_Circ = eqn2Numer / valS; 
    return radiusT_Circ;
}

void printResults(double angleYres, double radiusMethod1, double radiusMethod2) {
    printf("Angle Gamma: %lf", angleYres);
    printf("Method 1: %lf", radiusMethod1);
    printf("Method 2: %lf", radiusMethod2);
}*/

int main() {
    int length;
    int l1, l2, l3, angleY;
    double angleYres, radius1res, radius2res;
    // Gets user lengths and assigns them to l1, l2, l3
    l1 = readLength();
    l2 = readLength();
    l3 = readLength();
    // Calculates angle Y
    angleYres = calculateGamma(l1, l2, l3);
    printf("Angle Y: %lf\n", angleYres);
    // Calculates radius using method 1
    radius1res = radiusMethod1(angleYres, l1, l2, l3);
    printf("\n%lf", radius1res);
#包括
#包括
int readLength(void){
整数长度;
printf(“请输入一个边(最后一个最大值):”;
扫描频率(“%d”和长度);
返回长度;
}
双计算伽玛(整数l1、整数l2、整数l3){
双方程1数值=(功率(l1,2)+功率(l2,2)-功率(l3,2));//方程1计算
双方程1=2*l1*l2;
双角度Y=acos(等式1数值/等式1数值);
返回角度;
}
双半径方法1(整数角度、整数l1、整数l2、整数l3){
printf(“角度Y:%lf\n”,角度Y);
printf(“%d%d%d”,l1、l2、l3);
}
/*双半径方法2(整数l1、整数l2、整数l3){
双VAL=(.5)*(l1+l2+l3);//计算平方根下的值
双方程2数值=(功率(VAL*(VAL-l1)*(VAL-l2)*(VAL-l3),0.5);
双半径循环=等式2数值/VAL;
返回半径_Circ;
}
无效打印结果(双角度、双半径方法1、双半径方法2){
printf(“角度伽马:%lf”,角度Y);
printf(“方法1:%lf”,半径方法1);
printf(“方法2:%lf”,半径方法2);
}*/
int main(){
整数长度;
内部l1、l2、l3、角度;
双角度、半径1、半径2;
//获取用户长度并将其分配给l1、l2、l3
l1=读取长度();
l2=读取长度();
l3=读取长度();
//计算角度Y
角度=calculateGamma(l1、l2、l3);
printf(“角度Y:%lf\n”,角度Y);
//使用方法1计算半径
半径1=半径方法1(角度、l1、l2、l3);
printf(“\n%lf”,半径1res);

我希望angleY在函数radiusMethod1中输出到~1.4,但是它在函数中输出到0.0000,在主函数中输出到-nan(ind)。

在双半径方法1(int angleYres,int l1,int l2,int l3)的声明中,angleYres应该是双精度的,而不是int


在主函数中将
angleY
声明为int时也会出现同样的问题。这里它也应该是双精度的。

打开编译器警告(
-Wall-Wextra
如果使用gcc或clang),并注意它们。
radiusMethod1
没有返回语句…
double radiusMethod1(int angleYres…
-->
double radius method1(double angleYres…
?@4386427我正试图使用calculateGamma中的返回语句在radius method1中打印angleY,因为我需要使用angleY来计算radius method1。哦,我的天啊……我太笨了。当然我没有使用相同的类型……谢谢。对不起大家。