#include<stdio.h>
#include<stdlib.h>
double mean(int i, int arr[])
{
int j, sum = 0;
for (j = 0; j < i; j++)
{
sum = arr[j] + sum;
}
return (float)sum/i;
}
int main()
{
int arr[100] = { NULL };
int i, n, sum = 0;
printf("How many numbers would you like to enter?");
scanf_s("%d", &n);
while (n > 100 || n < 0)
{
printf("Amount of numbers should be less than 0 and more than 100\n");
scanf_s("%d", &n);
}
for (i = 0; i < n; i++)
{
scanf_s("%d", &arr[i + 1]);
}
printf("%f", mean(i-1, arr[i]));
system("pause");
}
当我运行代码时,它会给我一个读访问错误。问题在于我创建的mean()函数,但我不知道出了什么问题。帮助
答案 0 :(得分:6)
当我运行代码时,它会给我一个读访问错误。问题出在
上mean()
函数
虽然mean()
函数会产生读访问错误,但实际问题在于:
printf("%f", mean(i-1, arr[i]));
你没有将一个数组传递给你的函数,但是它的元素(它是一个超过写入结尾的元素,所以即使你传递的值也是未定义的)。
您需要传递i
这个长度,因为您的mean()
将其视为独占上限,您还需要为该数组传递arr
:
printf("%f", mean(i, arr));
读取数据时的索引问题也需要修复 - 您需要删除+ 1
:
scanf_s("%d", &arr[i]);
// ^
答案 1 :(得分:2)
试试这个:
#include<stdio.h>
#include<stdlib.h>
double mean(int i, int arr[])
{
int j, sum = 0;
for (j = 0; j < i; j++)
{
sum = arr[j] + sum;
}
return (float)sum/i;
}
int main()
{
int arr[100] = { 0 };
int i, n, sum = 0;
printf("How many numbers would you like to enter?");
scanf("%d", &n);
getchar();
while (n > 100 || n < 0)
{
printf("Amount of numbers should be more than 0 and less than 100\n");
scanf("%d", &n);
getchar();
}
for (i = 0; i < n; i++)
{
scanf("%d", &arr[i]);
getchar();
}
printf("%lf", mean(n, arr));
getchar();
}
您对mean
功能的调用是错误的。您必须传递整个数组,而不仅仅是一个元素。将arr[i]
更改为arr
。
我做了其他的小修改,使其在我的系统上运行。如果它对你有效,那么很好。