【问题标题】:Why C gave a weird output when adding floats and integers? [closed]为什么 C 在添加浮点数和整数时会给出奇怪的输出? [关闭]
【发布时间】:2022-10-24 05:44:20
【问题描述】:

我现在正在学习 C,我知道我不能像这样添加带小数的整数:

#include <stdio.h>
int main() {
printf("%d",15+9.0);
  return 0;

但是,在运行此程序时,我预计会出现某种错误。相反,我得到了一个奇怪的输出:

-1866308488

有人可以帮我理解为什么它给了我这个输出吗?

【问题讨论】:

  • 有人可以帮我理解为什么它给了我这样的输出吗?-- 当你指定%d 格式说明符时,你对printf 撒谎并给它一个double 而不是int
  • %d 格式说明符需要 int。如果您传递double,它将无法正确提取和解释参数。使用%f%g 格式化double
  • 我知道我不能添加带小数的整数不,那不是真的。你绝对能够添加一个整数和一个浮点数,例如9.0。但结果是一个浮点数,所以必须使用%f%e 打印它。 %d 用于打印整数。
  • 如果您的编译器没有像warning: format specifies type 'int' but the argument has type 'double' 那样给您警告,但应该提高编译器的警告级别,或者获得更好的编译器。

标签: c


【解决方案1】:

正如@PaulMcKenzie 所说,C 期望基于%d 格式说明符的int。你给了它一个双倍。 C 经常给出意想不到的行为,而不是像 Java 或 C# 那样抛出错误。 What happens to a double variable when %d is used in a printf? 表示结果行为未定义且特定于操作系统。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-11-27
    • 2021-03-12
    • 1970-01-01
    • 1970-01-01
    • 2013-01-13
    • 2022-01-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多