main()
{
printf ("%d",(3.0/2)*2) ;
}
以下C程序的输出应为3.为什么我得到0?
答案 0 :(得分:5)
指令%d
需要一个整数(类型为int
),但您要传递一个浮点值(double
类型)。
根据编译器,处理器,程序的确切内容以及月亮的相位,这可以做任何事情(它的未定义行为):崩溃,打印一些虚假值,{{3}在这里,碰巧编译器生成的代码从某个地方获取一个整数值,恰好在那一点包含值0。
要打印浮点值,请更改printf指令:
int main(void)
{
printf ("%f", (3.0/2)*2);
}
要打印整数,请使用强制转换转换参数:
int main(void)
{
printf ("%d", (int)((3.0/2)*2));
}
当你犯这样的错误时,好的编译器会警告你。确保打开编译器的警告级别。
答案 1 :(得分:0)
将3.0 / 2更改为3.0 / 2.0
printf("%d",(int)((3.0/2.0)*2));