首页 > 解决方案 > 寻找元素平均值的问题

问题描述

使用 Repl.it 并尝试使用 C 中的函数来平均可变长度数组中的元素。除了返回的平均值之外,我的程序在所有其他 i/o 区域都可以正常工作:

当天的平均值是:-nan。关于问题可能是什么的任何见解?

目标是接收用户输入的双倍输入(例如,在 7 小时内每小时抽取多少品脱血,然后使用函数调用计算这 7 小时内的平均量。

新代码如下:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
double average(int size, float ary[*]);


int main(void)
{
char dayOne[8], dayTwo[8];
int size;
float ave;

printf("Over how many hours do you want to view donation amounts?: "); 
scanf("%d", &size);
if (size < 7 || size > 7)
  size = 7;
printf("Enter day that you want to see average donation amount for: ");
scanf("%s", dayOne);
{
    float ary[size];

    for (int i = 0; i < size; i++)
    {
        printf("\nEnter amount taken in hour %d:", i + 1);
        scanf("%f", &ary[i]);

    }
    ave = average(size, ary);
    printf("\nThe average donated for %s is: %2.1f", dayOne, ave);
 }

 printf("\n\nEnter day that you want to see average donation amount for: ");
 scanf("%s", dayTwo);

if(strcmp(dayOne, dayTwo)== 0)
   printf("\nEnter a different day please: ");

   scanf("%s", dayTwo);

 {
  float ary[size];

  for (int i = 0; i < size; i++)
  {
    printf("\nEnter amount taken in hour %d:", i + 1);
    scanf("%f", &ary[i]);
 }
    ave = average(size, ary);
    printf("\nThe average donated for %s is: %2.1f", dayTwo, ave);

}   


return 0;
}

double average(int size, float ary[])
{

double sum = 0;

double ave;

for (int i = 0; i < size; i++)
    sum += ary[i];

ave = (double)sum / size;
return ave;
}

标签: crepl.it

解决方案


这是错误的:

int ary[7];
…
scanf("%f", &ary[i]);

%f是用于扫描 a float,但是ary[i]int. 结果行为未定义。

这是错误的:

double size;
…
ave = average(size, ary);

“...”中的任何内容都没有为 赋值,因此在调用size时它没有定义的值。average


推荐阅读