我正在为学校开发一个小程序,但无法正确求和我的 double 数组。我收到的具体错误是
warning C4244: 'return': conversion from 'double' to 'int', possible loss of data
在返回 sum 的行上。显示的总和是乱码。
该代码的目的是:
- 用用户输入填充 double 组,
- 将 double 打印在屏幕上的一列中,
- 将数组中的所有 double 相加,并且
- 将总和打印到屏幕上。
代码
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#define MAX_SIZE 15
void FillArray(double a[], int *i);
void PrintArray(double a[], int i);
SumArray(double a[], int *i);
int main()
{
double input[15];
int input_size;
double sum;
FillArray(input, &input_size);
PrintArray(input, input_size);
sum = SumArray(input, &input_size);
printf("The sum is %f\n", sum);
return 0;
}
void FillArray(double a[], int *i)
{
int k;
printf("Filling an array of doubles\n");
printf("How many doubles do you want to enter (<15)\n");
scanf(" %d", i);
for (k = 0; k <*i; k++)
{
printf("Enter double:\n");
scanf("%lf", &a[k]);
}
}
void PrintArray(double a[], int i)
{
int k;
printf("Printing an array of integers:\n");
for (k = 0; k<i; k++)
{
printf("%f\n", a[k]);
}
printf("\n");
}
SumArray(double a[], int *i)
{
int k;
double sum = 0;
for (k = 0; k<*i; k++);
{
sum +=a[k];
}
return (sum) ;
}
最佳答案
您需要在声明和定义函数时指定double SumArray(...)
,而不仅仅是SumArray(...)
。如果未指定返回类型,则假定为 int
。具体来说:
void FillArray(double a[], int *i);
void PrintArray(double a[], int i);
double SumArray(double a[], int *i);
/*^^^^^^-- add return type*/
int main()
和
double SumArray(double a[], const int numElements)
/*^^^^^^- same deal*/ /* also ^^^^^ ^^^^^^^^^^^ */
{
int k;
double sum = 0.0; /* Edit 3: 0.0 rather than 0 for clarity */
for (k = 0; k < numElements; ++k) /* no ; here! --- Edit 3: ++k for speed and good practice */
{ /* ^^^^^^^^^^^ */
sum +=a[k];
}
return (sum) ;
}
编辑 此外,您可以在 SumArray
中使用 const int numElements
代替 int *i
。您不需要修改 SumArray
内部的值,因此不需要 *
并且可以指定 const
。为变量提供描述性名称是一个很好的做法,例如,numElements
而不是 i
。当您以后需要维护自己的代码时,这将帮助您理解它! (问我怎么知道。;))
要使用此功能,您还需要更改 main
中的调用以删除 &
:
sum = SumArray(input, input_size);
/* ^ no & here */
编辑 2 正如 @BLUEPIXY 所指出的,for
循环上的尾随 ;
放错了位置。结果,{}
block 在循环完成后运行一次。这将是您看到的“乱码”的一个重要原因:效果是设置 k=numElements
然后设置 sum=a[numElements]
,这是一个非- 存在的元素。因此,sum
被设置为 a
之后发生的任何随机内存内容。
关于c - C中数组的和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40289377/