双重算术每次在C中产生随机数

Jak*_*nby 1 c math double

我是一名初学者,在大学学习C语言,并且想知道为什么这段代码总是产生一个随机数,而不是像我期望的那样.

码:

#include<stdio.h>

int main(void){
    double a, b = 32.5;
    a = 2 / 5 * (b - 30);
    printf("%d\n", a);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

当我运行代码时,它每次打印出一个不同的随机值:

-780835368
-1509625304
1267593528
Run Code Online (Sandbox Code Playgroud)

是我得到的一些结果.任何帮助表示赞赏.

ars*_*jii 5

您通过尝试通过整数格式说明符打印双精度来调用未定义的行为%d.请改用浮点说明符:

printf("%f\n", a);
Run Code Online (Sandbox Code Playgroud)

我累了,但它只打印0.000000?

因为2 / 5- 执行整数除法从而导致0.因此,a被分配给0.你可能想要2.0 / 5.0哪个执行真正的分裂.