为什么不使用double函数中声明的数字?(C) #包括 双重计算平均值(整数) { 静态int numberInput=0;//计数器 静态整数和=0; 总和=总和+数字输入; numberInput++; 返回和/数字输入; //计算并返回到目前为止的平均值。 } 内部主(空) { 双倍平均; 而(1) { 整数; scanf(“%d”和编号); 如果(数字==0) break;//如果number==0,则停止 其他的 平均值=计算平均值(数字); } printf(“%.1f\n”,平均值); 返回0; }

为什么不使用double函数中声明的数字?(C) #包括 双重计算平均值(整数) { 静态int numberInput=0;//计数器 静态整数和=0; 总和=总和+数字输入; numberInput++; 返回和/数字输入; //计算并返回到目前为止的平均值。 } 内部主(空) { 双倍平均; 而(1) { 整数; scanf(“%d”和编号); 如果(数字==0) break;//如果number==0,则停止 其他的 平均值=计算平均值(数字); } printf(“%.1f\n”,平均值); 返回0; },c,C,正如我个人所说,函数试图计算平均值。但是为什么主函数不在calculate_average函数中使用number?如前所述,您的calculate_average函数不使用其给定的number参数,因为在该函数的任何地方,您都没有指示它这样做。最可能的情况是,您的sum=sum+numberInput应该是sum=sum+number(从而将给定的数字添加到运行总数中) 还有几点: 你应该初始化你的average变量(到0.0),否则如果你给你的程序一个空列表(即第一个条目为零),你会得到一个疯

正如我个人所说,函数试图计算平均值。但是为什么主函数不在calculate_average函数中使用
number

如前所述,您的
calculate_average
函数不使用其给定的
number
参数,因为在该函数的任何地方,您都没有指示它这样做。最可能的情况是,您的
sum=sum+numberInput
应该是
sum=sum+number(从而将给定的数字添加到运行总数中)

还有几点:

  • 你应该初始化你的
    average
    变量(到0.0),否则如果你给你的程序一个空列表(即第一个条目为零),你会得到一个疯狂的结果
  • 由于函数返回一个
    double
    ,因此最好将
    sum
    变量也作为
    double
    ;否则,您将在计算中执行整数算术,所有返回值将被截断为整数(丢失任何小数部分)
  • 其他人可能会指出,您应该始终检查
    scanf
    调用返回的值(如果读取操作成功,则返回值为
    1
    ),并添加代码以处理任何错误;然而,在这里解决这一点,IMHO,超出了这个问题的“范围”,但要注意
  • 以下是一个可能的工作版本:

    #包括
    双重计算平均值(整数)
    {
    静态int numberInput=0;//计数器
    静态双和=0.0;
    总和=总和+数字;
    numberInput++;
    返回和/数字输入;
    //计算并返回到目前为止的平均值。
    }
    内部主(空)
    {
    double average=0.0;//初始化变量总是最好的!
    而(1){
    int getal;
    scanf(“%d”和“getal”);
    如果(getal==0)
    break;//如果getal==0,则停止
    其他的
    平均值=计算平均值(getal);
    }
    printf(“%.1f\n”,平均值);
    返回0;
    }
    

    请随时询问任何进一步的解释和/或澄清。

    您是如何确认这一点的?您是否意识到
    sum/numberInput
    是整数除法,将向0取整?函数试图返回
    double
    的事实太晚了。“调用号码”是什么意思?你认为到底遗漏了什么?不清楚。你给这个程序什么输入?它能产生什么样的产出?为什么这是错误的?包括样本输入、期望输出、当前输出和差异/问题的描述。我很欣赏答案,这对理解错误有很大帮助。整个问题实际上是我完全破坏的总和计算。因此,修正值确实是sum=sum+number;第3点非常重要——编写时,如果用户在任意点输入非数字(非空白)字符,代码可能会挂起(进入无限循环)。不好的。如果(scanf(“%d”,&getal)!=1)中断,则至少
    会更好
    至少会终止无效(非数字)输入的循环。哇,我刚刚检查过。它确实使它变得无限。谢谢“我现在必须注意这些类型的事情了。”“真奇怪。但是链接的答案(某种程度上)解决了这个问题,我真的不想重复其他SO帖子(我肯定有一些)。@Heeko
    scanf
    系列函数的主要目标似乎是“绊倒”C初学者(和其他人)