Use of %d inside printf to print float value gives unexpected output
1 2 3 4 5 6 7 8 | #include<iostream> #include<stdio.h.> using namespace std; int main() { float f=11.11; printf("%d",f); } |
当我在dev c中执行以下代码时,其输出为-536870912。
当我在在线教程点编译器上执行相同的代码时,每次运行都会得到不同的结果。可能是什么原因造成的?
如果参数与格式说明符不匹配,则它是未定义的行为。 Ue
1 |
使用良好的编译器,您应该可以轻松捕获此类错误。 GCC产生:
1 | warning: format a€?%da€? expects argument of type a€?inta€?, but argument 2 has type a€?doublea€? [-Wformat=] |
输入您的代码。
P.S .:
我不确定您是否在问为什么它没有打印11?还是为什么在不同的编译器下会打印出不同的答案?。
不打印11的原因是,正如其他答案所解释的那样,
它在不同的编译器下打印不同内容的原因是它的不确定行为,意味着任何事情都可能发生。假设您出门开车,松开前轮上的所有螺母,直到快要掉下来,上车,然后沿着高速行驶,直到车轮掉下,这时您就会失去控制并坠毁陷入沟中。并且假设您明天会买一辆新车,做完全一样的事情,除了偶然地撞倒在一棵树上。此时,您可以采用两种方法:
此处的转换说明符与变量类型不匹配:
1 |
传递给
要解决此问题,请使用正确的转换说明符。
对于浮点变量,请使用转换说明符
这是一个浮点数,请使用
1 |
如果不这样做,则是不确定的行为。
要理解,可以尝试将值-1的int强制转换为无符号int。
您将获得巨大的价值。