获取从C中的函数返回的奇怪数字
我有几个文件: 评估单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
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;
}