【发布时间】:2015-06-03 06:04:08
【问题描述】:
每次我运行这个程序时,我都会得到不同且奇怪的结果。这是为什么呢?
#include <stdio.h>
int main(void) {
int a = 5, b = 2;
printf("%.2f", a/b);
return 0;
}
【问题讨论】:
标签: c printf format-specifiers
每次我运行这个程序时,我都会得到不同且奇怪的结果。这是为什么呢?
#include <stdio.h>
int main(void) {
int a = 5, b = 2;
printf("%.2f", a/b);
return 0;
}
【问题讨论】:
标签: c printf format-specifiers
printf("%.2f", a/b);
除法的输出再次是int 类型,而不是float。
打印出int 的正确格式说明符是%d
【讨论】:
在您的代码中,a 和 b 的类型为 int,因此除法本质上是整数除法,结果是 int。
您不能随时使用错误的格式说明符。 %f 要求对应的参数是double 类型。您需要将%d 用于int 类型。
FWIW,使用错误的格式说明符调用 undefined behaviour。
来自C11 标准,第 7.21.6.1 章,fprintf()
如果任何参数不是相应转换规范的正确类型,则行为未定义。
如果你想要一个浮点除法,你需要明确地这样做
在除法前提升变量之一以强制浮点除法,其结果将是浮点类型。
printf("%.2f", (float)a/b);
a 和b 使用float 类型。【讨论】:
您需要将类型更改为浮点或双精度。
类似这样的:
printf("%.2f", (float)a/b);
%f 格式说明符用于float。使用错误的格式说明符会导致您出现未定义的行为。 int 除以一个 int 会给你一个 int。
【讨论】:
用这个代替你的 printf()
printf("%.2lf",(double)a/b);
【讨论】:
double?
float 更改为double,它可能给OP 留下错误的印象。只是说。