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

获取从C中的函数返回的奇怪数字,c,C,我有几个文件: 评估单c: int evaluate_sin(int deg) { double j = deg_to_rad(deg); j = sin(j); printf("sin(%d) = %d\n", deg, j); return j; } 摄氏度至摄氏度 double deg_to_rad(int deg) { double rad = (3.14 * deg) / 180; return rad; } 当我将evaluate

我有几个文件:

评估单c:

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

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

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

请注意,j是双精度的,而不是整数


所以
printf(“sin(%d)=%d\n”,deg,j)应与printf一起放置(“sin(%d)=%f\n”,deg,j)

您尚未声明
deg_to_rad()

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

您应该有一个标题
degtorad.h

degtorad.h
(在本例中,收割台防护装置不是100%必需的,但对于需要收割台防护装置的更复杂情况,这是一个很好的基础。)

然后你的程序文件包括这个头文件。在此过程中,您还需要声明
evaluate\u sin()
;它可以进入同一个标题

评估单c: 虽然
printf(“%f”,doubleValue)
可以使用double,但我仍然建议尽量简单,并使用
scanf()
要求使用
%lf
进行double的方式。这给了程序一致性的感觉

因此,是的,我建议:


printf(“sin(%d)=%lf\n”,deg,j)

非常确定
双精度
整数
%d
)对于该打印没有相同的位格式。试试
%f
你能改用
%f
吗?你也能发布函数调用吗?这样我们至少可以看到参数。它不应该是
%lf
@WhozCraig:-p人们在哪里得到这样的想法:他们可以学习如何编程而不必学习如何阅读手册?手册或复制手册的stackoverflow注释:(如果您确信您有C99编译器,这是可以的。将
%lf
与C89一起使用会调用未定义的行为,这从来都不是一个好主意。当然,首要的“卡在时间扭曲中”编译器是Microsoft的C编译器,它是一个C89编译器,具有很少的C99增强功能。MSDN可能定义了
的行为>%lf
用于MSVC,但要小心。
extern double deg_to_rad(int deg);
#ifndef DEGTORAD_H_INCLUDED
#define DEGTORAD_H_INCLUDED

extern double deg_to_rad(int deg);

#endif /* DEGTORAD_H_INCLUDED */
#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;
}
#include "deg_to_rad.h"

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