我正在尝试编写一个函数,将“ t”重复添加0.001,然后将其插入“ y”,直到“ t”达到0.3,但是数字出现错误,但是我注意到,如果我将float更改为int并将数字更改为整数,该函数起作用..我应该更改什么,以便该函数正常工作
#include <stdio.h>
#include <math.h>
void main(void)
{
float t,y,dt;
dt = 0.001;
y = 1;
t = 0;
while (t <= 0.3)
{
y = y + dt*(sin(y)+(t)*(t)*(t));
t = t + dt;
}
printf("y is %d when t is 0.3\n" , y);
return 0;
}
答案 0 :(得分:1)
我注意到,如果我将float更改为int并将数字更改为整数,则该函数起作用了。我应该更改什么,以便该函数正常工作
如评论中所说,问题是您(尝试)在其中打印值的方式
printf("y is %d when t is 0.3\n" , y);
%d
假设相应的参数是 int 并将其打印为 int ,但是 y 是浮动。请注意,在这种情况下,不会从 float 转换为 int ,因为参数是通过 varargs
只要做
printf("y is %f when t is 0.3\n" , y);
也要更改
void main(void)
到
int main()
更改后,编译并执行:
/tmp % gcc -pedantic -Wall -Wextra f.c -lm
/tmp % ./a.out
y is 1.273792 when t is 0.3
请注意,所有计算都是在 double 中完成的,因此最好将 float 替换为 double 以输入您的变量
(edit)使用 gcc 和选项-Wall
编译您的初始代码表明您的问题:
/tmp % gcc -Wall f.c -lm
f.c:4: warning: return type of 'main' is not 'int'
f.c: In function 'main':
f.c:18: warning: format '%d' expects type 'int', but argument 2 has type 'double'
f.c:19: warning: 'return' with a value, in function returning void
同时使用-Wall和-Wextra是更好的选择