格式'%lf'期望类型为'double'的参数,但是参数2的类型为'double *'

时间:2019-03-09 18:23:05

标签: c

我尝试搜索此错误代码,但是我是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);

1 个答案:

答案 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的值与==进行比较,因为浮点计算的精度有限。