【问题标题】:I want to avoid 'floating point error' in C program我想避免 C 程序中的“浮点错误”
【发布时间】:2014-04-01 10:28:11
【问题描述】:

我想避免此代码中出现“浮点错误”。

此代码的目的是获得“整数的平均值”,但“整数”的数量受用户输入的限制。请帮帮我。

#include <stdio.h>

int main(void)
{
    int num=0;
    int limit;
    int result=0;

    printf("number of integer: ");
    scanf("&d", &limit);

    while(num<limit)
    {
        int output;
        printf("Input integer : ");
        scanf("%d", &output);
        result += output;
        num++;
    }
    printf("average of total integer: %d \n", result/limit);
    return 0;
}

感谢您的阅读。

【问题讨论】:

  • 没有作业,但我一个人读书。
  • 已经好了。您不进行任何浮点计算,因此不会出现浮点错误。
  • 你得到什么“浮点错误”?还是你只是猜测你能得到一个?
  • 读取为limitscanf 的格式应为"%d" 而不是"&amp;d"
  • 您希望从scanf("&amp;d", &amp;limit); 得到什么?哦,将一个 int 除以一个 int,得到一个 int。不是浮子。将resultlimit 声明为floatdouble

标签: c


【解决方案1】:

当你将两个整数相除时,结果也是一个整数。

要返回浮点数,您需要将其中一个参数转换为浮点数。

所以你的最后一行变成了

printf("average of total integer: %f \n", result/(float)limit);

【讨论】:

  • 感谢您的回答! =)
  • 好奇你为什么投给float而不是double?注意:商result/(float)limit 在传递给printf() 之前会转换为double
  • @chux 你确定吗?结果的类型是较长参数的类型。所以在这种情况下它将是浮动的。
  • @Bartlomiej Lewandowski 同意你的“它”,即商,是float。但是“它”被传递给printf(char *format, ...) 并且作为variadic 参数,它通过默认参数提升,在这种情况下是:float 提升为double。 C11 §6.5.2.2 6 这就是为什么如果您将floatdouble 传递给printf(),它使用与float 相同的格式说明符被提升为double
  • @chux 谢谢,我在传递给 printf 时不知道这个促销活动。
【解决方案2】:

由于两个integer相除的结果也是一个整数,所以它为

printf("average of total integer: %f \n", result/(float)limit);

当您键入转换变量limit 以浮动时,会发生result 将隐式转换为float,因此结果是float

【讨论】:

  • 另一个答案比你早9分钟,你的没有添加任何实质性消息。
  • @glglgl 我的网络中断了。
猜你喜欢
  • 2012-11-26
  • 2013-01-29
  • 2019-12-15
  • 1970-01-01
  • 2011-03-23
  • 2011-03-26
  • 2021-10-10
  • 2015-05-26
  • 1970-01-01
相关资源
最近更新 更多