为什么将float的格式说明符赋予指定的整数结果为0.000000?

时间:2015-10-19 09:23:34

标签: c printf output

我试图将float的格式说明符赋予给定的整数,并且它会导致0,并且如果在同一语句中,另一个浮点数b给定一个整数的格式说明符,它会给出荒谬的输出,并在函数.run(function($ionicPlatform, $state,$ionicPopup,$ionicHistory, $timeout, $rootScope, connectivityMonitor) { $rootScope.isAppOnline = function() { var is_connected = connectivityMonitor.isInternetConnected(); is_connected.then(function(result) { //some code to call a webservice }); } $timeout(function(){ var currentStateName = $ionicHistory.currentStateName(); console.log("currentStateName == ",currentStateName); $rootScope.isAppOnline(); },10000); 中我尝试将正确的格式说明符分配给b,结果为0.这个错误的格式说明符最初是否会分配整个语句?

这是我的代码:

surp

输出:

0.000000 and 1074528256  
0.000000 and 0.000000

3 个答案:

答案 0 :(得分:2)

此代码在调用printf时调用未定义的行为,因为您可能会发现自己需要注意。任何事情都可能发生,包括你观察到的输出。

printf("%f and %d\n",i,b); // both i and b do not match
printf("%f and %f\n",i,b); // i does not match

您必须提供与所使用的格式说明符匹配的值。当你不这样做时,尝试推断未定义的行为是毫无意义的。

您的main功能应为int main(void)surp函数在声明之前被调用,并且在实现中缺少return语句。

答案 1 :(得分:1)

当你引发未定义的行为时,我不知道为什么你会期待明智的结果。

在这两种情况下,您都使用float指定并输入一个整数。

问题是这些变量可能具有不同的大小,并且函数需要适当地使用和解释它们。你可能会引发内存违规行为。

顺便说一句,如果您使用的是gcc,可以使用-Wformat开关,以便编译器为您分析语法和类型并发出警告。

答案 2 :(得分:1)

尝试将整数打印为float是未定义的行为。从程序崩溃到你得到的输出都可能发生。这使得讨论毫无意义。

btw:

b=3.5;

仍然可能不是你想要的。

默认情况下,

3.5被解释为double字面值,这意味着它会隐式转换为float,从而导致额外的舍入。

DO

b = 3.5f;

代替