C中的数组和
我正在为学校做一个小程序,无法使我的双倍数组正确相加。我得到的具体错误是C中的数组和,c,arrays,visual-studio,loops,double,C,Arrays,Visual Studio,Loops,Double,我正在为学校做一个小程序,无法使我的双倍数组正确相加。我得到的具体错误是 warning C4244: 'return': conversion from 'double' to 'int', possible loss of data 在返回sum的行上。显示的总和是乱七八糟的 该守则旨在: 用用户输入填充一个双精度数组 在屏幕上的列中打印双精度 将数组中的所有双精度相加 将总数打印到屏幕上 密码 \define\u CRT\u SECURE\u NO\u警告1 #包括 #定义最大尺寸15
warning C4244: 'return': conversion from 'double' to 'int', possible loss of data
在返回sum的行上。显示的总和是乱七八糟的
该守则旨在:
\define\u CRT\u SECURE\u NO\u警告1
#包括
#定义最大尺寸15
void FillArray(双a[],int*i);
void printary(双a[],int i);
SumArray(双a[],int*i);
int main()
{
双输入[15];
int输入大小;
双和;
填充数组(输入和输入大小);
打印阵列(输入,输入大小);
sum=SumArray(输入和输入大小);
printf(“总和为%f\n”,总和);
返回0;
}
空填充数组(双a[],int*i)
{
int k;
printf(“填充一个双精度数组\n”);
printf(“您想输入多少个double(您需要指定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()
及
edit2正如@BLUEPIXY所指出的,for
循环的;
尾随的被放错了位置。结果,{}
块在循环完成后运行了一次。这将是您看到的“胡言乱语”的一个重要原因:效果是设置k=numElements
,然后设置sum=a[婚礼]
,它是一个不存在的元素。因此,总和
被设置为在a
@BLUEPIXY Good catch-fixedThanks之后发生的任意随机内存内容。我更改了它,但我的总和仍然是错误的。它给出了一个非常大的负数。@C45M99S刚刚根据BLUEPIXY更新-您尝试了最新的吗在行的;
中,找出。@BLUEPIXY修复了它。不知道我怎么会错过它。谢谢。请不要更正问题,人们将不知道你问了什么。更正实际代码。回滚。你不应该更改问题中的原始代码以反映修复。这会改变问题,掩盖问题原始问题,并可能使注释/答案出现断章取义的情况,并使后来出现的其他人感到困惑。编译时,始终启用所有警告,然后修复这些警告。如果编译器输出有关代码的警告,则没有理由尝试运行代码。
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) ;
}
sum = SumArray(input, input_size);
/* ^ no & here */