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

时间:2014-05-24 06:21:18

标签: c printf

main()
{
printf ("%d",(3.0/2)*2) ;
}

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

2 个答案:

答案 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));