我尝试搜索此错误代码,但是我是C语言的新手,而答案并没有真正为我解决。如果有人能指出我要去哪里,我将不胜感激,因为当我在do while循环中打印出任何值时,它的值为0。谢谢!
initial_x_pos = 300;
initial_y_pos = 800;
x_pos = initial_x_pos;
y_pos = initial_y_pos;
gravity = 1.62;
position = sqrt(pow(x_pos, 2) + pow(x_pos, 2));
influence = 3.14 * 50 * 50;
GFX_SetColour(WHITE);
GFX_MoveTo(initial_x_pos, initial_y_pos);
do {
time += 1;
y_pos = initial_y_pos - (vel_y * time) / 2;
x_pos = initial_x_pos + (vel_x * time) / 2;
GFX_DrawLineTo(x_pos, y_pos, 3);
GFX_UpdateDisplay();
distance = sqrt(pow(y_pos - (y + 312), 2) + (pow(x_pos - (x+440), 2)));
printf("%lf\n", &distance);
printf("%lf\n", &vel_x);
} while (vel_x != 10000000000);
答案 0 :(得分:2)
l
中的转换说明符%f
忽略printf
修饰符,该修饰符期望值为double
。将float
参数传递给double
或任何其他变量函数后,它们会自动转换为printf
。
您没有将完整的代码发布到函数中,distance
变量的类型是未知的,但是通过&distance
传递其地址始终是错误的。您可能已经复制了通过scanf()
进行读取的代码,其中%lf
是类型double
所必需的,并且必须传递目标地址。
这是更正的版本:
int time = 0;
double distance;
double initial_x_pos = 300;
double initial_y_pos = 800;
double x_pos = initial_x_pos;
double y_pos = initial_y_pos;
double gravity = 1.62;
double position = sqrt(pow(x_pos, 2) + pow(y_pos, 2));
double influence = 3.14 * 50 * 50;
GFX_SetColour(WHITE);
GFX_MoveTo(initial_x_pos, initial_y_pos);
do {
time += 1;
y_pos = initial_y_pos - (vel_y * time) / 2;
x_pos = initial_x_pos + (vel_x * time) / 2;
GFX_DrawLineTo(x_pos, y_pos, 3);
GFX_UpdateDisplay();
distance = sqrt(pow(y_pos - (y + 312), 2) + (pow(x_pos - (x + 440), 2)));
printf("%f\n", distance);
printf("%f\n", vel_x);
} while (vel_x != 10000000000);
但是请注意,vel_x
不会在循环中修改,并且不建议将double
的值与==
进行比较,因为浮点计算的精度有限。