我的编译器 (gcc 4.4.3) 警告消息解释了这一点:
format ‘%.2f’ expects type ‘double’, but argument 2 has type ‘int’
由于您传递的值类型int
( ) 与格式字符串中指定的 ( ) 类型不同double
,因此由于这种不匹配,行为未定义
正如您所观察到的,一旦您将其调整为一致,您就会得到您期望的输出。IE,
/* provide a double value */
printf("\n***Hand washing: cost per kg/item: %.2f, cost: %.2f.\n", 5.0, dtemp);
输出:
***Hand washing: cost per kg/item: 5.00, cost: 3.14.
或者
/* specify an integer value in the format string */
printf("\n***Hand washing: cost per kg/item: %d, cost: %.2f.\n", 5, dtemp);
输出:
***Hand washing: cost per kg/item: 5, cost: 3.14.
提高编译器上的警告级别,然后跟进所有警告,并慎重决定哪些可以忽略,哪些不能忽略,这始终是一个好主意。