double数组的第一个值调用函数中和调用函数后不一样?

请教大家一个C语言问题 这是一个txt 内容:
0.992 1.029 1.074 1.120 1.008 1.018 0.974 0.980 0.982 0.957 0.862 0.975 1.049 1.047 1.038 0.959 1.011 1.017 1.007 0.963
我用fscanf方法读取成double类型的数组 并且在读取的函数中打印了一次 在函数中打印出来是正常的 但是一旦读取成功 数组的第一个值就变了 从0.992变成了0.4 为什么会出现这种情况呢?

在函数中打印出来是这样的:0.992 1.029 1.074 1.120......
读取完成后,打印出来是这样:0.400 1.029 1.074 1.120......

第一个数变化了。

这是读取的方法:
int readENSEMBLEtxt_to_doublearray(double a[])
{
//double v[20];//开一个足够大的数组。
int i = 0,j;
FILE *fpensem;//文件指针

fpensem = fopen(BGC_PATH, "r");//以文本方式打开文件。
if(fpensem == NULL) //打开文件出错。
    return -1;

//while(fscanf(fpensem, " %lf", &a[i]) != EOF) //读取数据到数组,直到文件结尾(返回EOF)
//  i++;
//fclose(fpensem);//关闭文件

while(!feof(fpensem)) {
    fscanf(fpensem,"%lf",&a[i]);
    ++i;
}

fclose(fpensem);//关闭文件

for(j = 0; j < i; j ++)//循环输出数组元素。
{
printf("%lf ", a[j]);

}
printf("\r\n");
return 0;

}

下面是相关的调用过程:
double ensemble[20]={0};
readENSEMBLEtxt_to_doublearray(ensemble);

如果 我把这个函数和调用过程,从我原来的程序中,抽出来,结果是对的。但是在我的程序中,一模一样的内容,出来后第一个数字变化了,这里是在Visual Studio里面。BGC_PATH,是我定义的一个宏:#define BGC_PATH "F:\\Biome-BGC\\biomebgc-4.2\\biomebgc-4.2\\generateEnsemble.txt"。原来的程序是个比较大的生态模型。

调试下是不是数组没有初始化或者越界了。

可能:
1.你的数组开的太小了,造成越界,被别的变量覆盖了原来的值
2.你使用的是生命周期已经结束的局部变量数组
眼过千遍不如手过一遍!
书看千行不如手敲一行!
手敲千行不如单步一行!
单步调试和设断点调试(VS IDE中编译连接通过以后,按F10或F11键单步执行,按Shift+F11退出当前函数;在某行按F9设断点后按F5执行停在该断点处。)是程序员必须掌握的技能之一。