main()
{
printf ("%d",(3.0/2)*2) ;
}
Run Code Online (Sandbox Code Playgroud)
以下C程序的输出应为3.为什么我得到0?
该指令%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)
当你犯这样的错误时,好的编译器会警告你.确保调高编译器的警告级别.