我试图将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
答案 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;
代替