【问题标题】:Explanation for console output [closed]控制台输出的解释[关闭]
【发布时间】:2021-12-31 00:03:39
【问题描述】:

我编写了这段代码来显示处理浮点数时的不准确性:

#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>

int main() {
    float sum1 = 0, sum2 = 0, sum3 = 0;
    double sum4 = 0, sum5 = 0, sum6 = 0;

    printf("%f + %f = $f\n", 0.1, 0.2, 0.1 + 0.2);
    printf("%f + %f = $f\n", 0.1, 0.3, 0.1 + 0.2);

    for (float i = 1; i <= 10000; i++) {
        sum1 = sum1 + (1 / i); 
    }

    for (double i = 1; i <= 10000; i++) {
        sum4 = sum4 + (1 / i);
    }

    for (float i = 1; i <= 100000; i++) {
        sum2 = sum2 + (1 / i);
    }

    for (double i = 1; i <= 100000; i++) {
        sum5 = sum5 + (1 / i);
    }

    for (float i = 1; i <= 1000000; i++) {
        sum3 = sum3 + (1 / i);
    }

    for (double i = 1; i <= 1000000; i++) {
        sum6 = sum6 + (1 / i);
    }

    printf("%f \t %lf \n%f \t %lf \n%f \t %lf \n", sum1, sum4, sum2, sum5, sum3, sum6);

    return 0;
}

尤其是部分

printf("%f + %f = $f\n", 0.1, 0.2, 0.1 + 0.2);
printf("%f + %f = $f\n", 0.1, 0.3, 0.1 + 0.2);

让我感到困惑,因为等号后的输出是 $f 我无法向自己解释。你能给我解释一下这句话的意思吗? 注意:我在互联网上搜索过,没有发现任何内容。

【问题讨论】:

  • printf("%f + %f = $f\n", 0.1, 0.3, 0.1 + 0.2);... 看起来那行有错字,最后一个数字应该是0.3...
  • 您在互联网上唯一能找到的就是有效的格式说明符和转义序列。在数十亿的其他任何东西中,它们都是逐字输出的。

标签: c printf


【解决方案1】:

printf 正在打印 $f,从字面上看,它不会将其识别为有效的说明符,除了 printf 说明符流仅需要 2 个浮点数之外,没有其他内容,但您有3 个参数,第三个参数不会被打印出来。

如果您确实想打印第三个参数,它查看您的代码是有道理的,那么这是一个错字,应该是%f。

正如 chqrlie 在下面指出的那样,您也可能按错了键,因为 $ 和 % 可能并排在您的键盘上。

【讨论】:

  • 或者应该只是 %f...$ 和 % 在 QWERTY 键盘上是连续的,这可以解释拼写错误。另请注意,%f 和 %lf 等效于 printf。
  • @chqrlie 好点。
  • 这个答案可以用近距离投票来总结
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-07-07
  • 2017-01-24
  • 2014-09-24
  • 2019-01-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多