【问题标题】:fPrintf an integer gives weird resultsfPrintf 一个整数给出了奇怪的结果
【发布时间】:2021-08-13 13:16:46
【问题描述】:

我正在编写需要进行调试的 C 代码。这就是我在文件中保存值“宽度”的原因。 代码是:

setlocale(LC_ALL, "en_US.UTF-8");
FILE* fp2;
fopen_s(&fp2, "test.txt", "w");

width = 0.05;

fprintf(fp2, " %d ", width);

fclose(fp2);

代码应在文件中打印 0.05。但是,它正在打印 -1717986918。

当我在循环中保存值时,文件中的 0.05 应保存到循环运行之前,但 -1717986918 会在循环运行时保存。

谁能帮帮我?

width 是一个浮点变量。

【问题讨论】:

  • 请发minimal reproducible example 并且不要标记 c 和 c++ 除非你真的同时使用这两种语言,它们是不同的语言
  • 你的%d 说参数是int,但它不是。使用错误的格式规范会导致未定义的行为。
  • @molbdnilo 是的!它是浮动的。你能告诉它是什么吗?
  • 阅读一些关于格式字符串的文档。
  • @molbdnilo,是的,明白了,谢谢。

标签: c printf cfprint


【解决方案1】:

正如您在评论中指定的那样,您的 width 变量是一个浮点数。 要打印浮点数,您需要以这种方式使用%f

fprintf(fp2, " %f ", width);

有关 fprint 格式化的更多信息,您可以查看以下referencewikipedia page for printf

【讨论】:

    【解决方案2】:

    您试图将width 输出为带有%d 的整数,这会导致这种行为。如果你使用%f,它将正常工作。

    【讨论】:

    • @Yunnosch 感谢您富有洞察力的评论。我的假设是基于变量的赋值,但我可以看到可能存在潜在的问题,比如变量在赋值之前被设置为 int。再次感谢您富有洞察力的评论,因为我是回答问题的新手,我还有很多东西要学。
    猜你喜欢
    • 2013-12-19
    • 2018-12-30
    • 2017-02-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-25
    • 1970-01-01
    • 2015-10-09
    相关资源
    最近更新 更多