【发布时间】:2016-03-11 09:09:38
【问题描述】:
这是我的 C 程序:
#include <stdio.h>
main(){ printf("%f", 5/3); }
我希望输出为1.000000,但我得到的输出是0.000000。谁能解释一下原因?
【问题讨论】:
-
您在构建时看到一些警告吗?
-
@purplepsycho:可能不会。没有返回类型的
main()表示他没有使用C99 或C11,尽管缺少return 0;会导致未定义的值作为退出状态返回给环境。如果编译器没有对此类问题发出警告,则不会对格式不匹配发出警告。他需要打开更多警告或获得更好的编译器——可能是后者。 -
@JonathanLeffler 我猜在 C 中,函数的默认返回类型是
int,而return 0;是隐式的,所以不需要它。顺便谢谢! -
只有非常老的 C (C89/C90) 的默认返回类型为
int; C99 和 C11 都需要明确的返回类型。因此,如果你省略了int,那么你一定是在使用非常古老的C。但是,非常古老的C没有main()末尾的隐含return 0;;由 C99 添加。因此,您的代码在非常古老的 C 语言中存在缺陷,因为它应该显式地从main()返回一个值。你不能同时拥有这两种方式。现在,您使用的编译器是否会注意到和抱怨是一个单独的问题。您可能没有使用触发它们的警告选项。
标签: c floating-point integer printf rounding