从C中的函数返回奇怪的数字

时间:2013-03-06 04:17:08

标签: c

我有几个文件:

evaluate_sin.c:

int evaluate_sin(int deg) {
    double j = deg_to_rad(deg);
    j = sin(j);
    printf("sin(%d) =  %d\n", deg, j);
    return j;
}

deg_to_rad.c

double deg_to_rad(int deg) {
    double rad = (3.14 * deg) / 180;
    return rad;
}

当我在我的evaluate_sin函数中将“deg”变量(这是一个整数)传递给deg_to_rad时,j最终会变成某个随机数,如-90503293。这是为什么?

3 个答案:

答案 0 :(得分:2)

请注意,j是double,而不是整数

因此printf("sin(%d) = %d\n", deg, j);应放在printf("sin(%d) = %f\n", deg, j);

答案 1 :(得分:1)

您尚未声明deg_to_rad()

extern double deg_to_rad(int deg);

使用之前。您的代码假定它返回int并将其转换为double

您应该有一个标题degtorad.h

degtorad.h

#ifndef DEGTORAD_H_INCLUDED
#define DEGTORAD_H_INCLUDED

extern double deg_to_rad(int deg);

#endif /* DEGTORAD_H_INCLUDED */

(在此示例中,标题保护不是100%必需的,但对于需要标头保护的更复杂情况,这是一个很好的基础。)

然后您的程序文件包含此标头。在某个地方,您还需要声明evaluate_sin();它可以进入相同的标题。

evaluate_sin.c:

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

double evaluate_sin(int deg)
{
    double j = deg_to_rad(deg);
    j = sin(j);
    printf("sin(%d) =  %.6f\n", deg, j);
    return j;
}

还请注意返回类型的更改(double而不是int);除非你设法传入π/ 2的精确奇数倍(当它返回-1或+1时),它将返回0。以及double值(%.6f而不是%d的格式更改,这将打印整数。)

如果您正在使用GCC,则需要打开编译警告;至少-Wall

deg_to_rad.c

#include "deg_to_rad.h"

double deg_to_rad(int deg)
{
    double rad = (3.14 * deg) / 180;
    return rad;
}

答案 2 :(得分:0)

尽管printf("%f", doubleValue)可以使用双打,但我仍然建议尽量保持简单,并使用scanf()需要%lf的方式进行双打。这为程序提供了一致性。

所以是的,我建议:

printf("sin(%d) = %lf\n", deg, j);