Возвращаемые значения из одной функции работают правильно, а возвращаемые из второй не отражают правильное значение - PullRequest
0 голосов
/ 30 октября 2019

В основном у меня есть две функции. Функция 1 CalculateGamma возвращает угол Y. Это мой прототип для функции:

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

Если я печатаю angleY ​​в main, значение составляет 1,44568. Если я печатаю angleYres (то, что я определил angleY ​​как в функции main) внутри функции radiusMethod1, возвращается 0,0000. Это смущает меня, поскольку l1, l2 и l3 все печатают на правильный вывод: 200, 250, 300, и это три значения, которые я получил от другой функции.

Мой вопрос: как я могу получитьвозвращаемое значение angleY ​​от convertGamma, которое будет использоваться в функции 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 ​​выведет до ~ 1,4 вФункция radiusMethod1, однако она выводит до 0,0000 внутри функции и -nan (ind) в main.

1 Ответ

1 голос
/ 30 октября 2019

В объявлении double radiusMethod1(int angleYres, int l1, int l2, int l3) angleYres должно быть двойным, а не int.

Та же проблема возникает при объявлении angleY как int в основной функции. Вот оно и должно быть двойным.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...