以下C程序的输出应该是3,但我得到0为什么?

Sus*_*dal -2 c printf

main()
{
printf ("%d",(3.0/2)*2) ;
}
Run Code Online (Sandbox Code Playgroud)

以下C程序的输出应为3.为什么我得到0?

Gil*_*il' 5

该指令%d需要一个整数(类型int),但是你传递一个浮点值(类型double).

根据编译器,处理器,程序的确切内容以及月亮的阶段,这可以做任何事情(它是未定义的行为):崩溃,打印一些虚假的价值,使守护进程从你的鼻子中飞出 ......在这里,它发生这种情况,编译器生成的代码从某个地方获取一个整数值,恰好在该点包含值0.

要打印浮点值,请更改printf指令:

int main(void)
{
    printf ("%f", (3.0/2)*2);
}
Run Code Online (Sandbox Code Playgroud)

要打印整数,请使用强制转换转换参数:

int main(void)
{
    printf ("%d", (int)((3.0/2)*2));
}
Run Code Online (Sandbox Code Playgroud)

当你犯这样的错误时,好的编译器会警告你.确保调高编译器的警告级别.