c - 一个函数的返回值工作正常,第二个函数的返回值不反射(reflect)正确的值

标签 c function

基本上我有两个功能。函数1,calculateGamma返回angleY。这是我的函数原型(prototype):

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;
}

我使用以下语句调用该函数:

angleYres = calculateGamma(l1, l2, l3);

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

这是我的第二个功能:

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

如果我在main中打印angleY,则该值为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);

我预计 angleY 在函数 radiusMethod1 中输出为 ~1.4,但它在函数内输出为 0.0000,在 main 中输出为 -nan(ind)。

最佳答案

double radiusMethod1(int angleYres, int l1, int l2, int l3)的声明中angleYres应该是一个double,而不是一个int。

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

关于c - 一个函数的返回值工作正常,第二个函数的返回值不反射(reflect)正确的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58616046/

相关文章:

bash - 如何重命名 bash 函数?

javascript - jQuery AJAX 调用 PHP 类函数

javascript - JQuery/JavaScript,动态存储/应用函数

c - 读取后如何刷新 FIFO?

c - 在C中按字母顺序对文件中的结构进行排序

c - 无效函数调用作为表达式

javascript - 如果在函数内调用函数,functionS 会被调用吗?编译级别发生了什么?

c - fmemopen 和 open_memstream 有什么区别?

c - C 语言的欧拉 8 项目,可以处理 4 位数字,但无法处理 13 位数字?

Python - 用于字符列表的 Sum() 函数