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 */