我想锻炼下面给出的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;
}
我想锻炼下面给出的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;
}
您在浮点表示,而你使用%d
说明符的printf强制期待的int
传递价值。
当您将变量传递给像printf这样的变量函数时,没有“自动转换”,因为c的值是作为实际数据类型传递给函数的(因为c是更大的兼容类型)弱类型的语言。
如果你通过类型不兼容的内部表示你会得到垃圾输出。
变化
printf("SI = %d", si);
到
printf("SI = %f", si);
或者(如果你想获得表达的积分值)
printf("SI = %d", (int)si);
任何想法为什么他得到0而不是预期的垃圾值? –
@VikasYadav考虑:我给你一个'浮动',并把它放在'浮动'框中。你看看“int”框,看看......什么都没有......并打印出来。也许从前面遗留的0,也许不是,也许盒子重叠?它是_undefined behavior_。 – chux
'的printf( “SI =%d”,SI );''但'si'是'float':改为'%f' –
'%d'是**整数** – litelite
为什么你认为'si'是'0'? – melpomene