2017-08-29 77 views
-5

我想锻炼下面给出的c程序的输出,但无法弄清楚。si的价值应该是什么?

为什么si = 0?

#include<stdio.h> 

int main(void){ 

    float p = 1000; 
    float r = 5; 
    float t = 2; 

    float si = p * r * t/100; 

    printf("SI = %d", si); 

    return 0; 

} 
+4

'的printf( “SI =%d”,SI );''但'si'是'float':改为'%f' –

+3

'%d'是**整数** – litelite

+1

为什么你认为'si'是'0'? – melpomene

回答

2

您在浮点表示,而你使用%d说明符的printf强制期待的int传递价值。

当您将变量传递给像printf这样的变量函数时,没有“自动转换”,因为的值是作为实际数据类型传递给函数的(因为是更大的兼容类型)弱类型的语言。

如果你通过类型不兼容的内部表示你会得到垃圾输出。

变化

printf("SI = %d", si); 

printf("SI = %f", si); 

或者(如果你想获得表达的积分值)

printf("SI = %d", (int)si); 
+0

任何想法为什么他得到0而不是预期的垃圾值? –

+1

@VikasYadav考虑:我给你一个'浮动',并把它放在'浮动'框中。你看看“int”框,看看......什么都没有......并打印出来。也许从前面遗留的0,也许不是,也许盒子重叠?它是_undefined behavior_。 – chux